{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# How to create Popups\n",
    "\n",
    "## Simple popups\n",
    "\n",
    "You can define your popup at the feature creation, but you can also overwrite them afterwards:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div style=\"width:100%;\"><div style=\"position:relative;width:100%;height:0;padding-bottom:60%;\"><span style=\"color:#565656\">Make this Notebook Trusted to load map: File -> Trust Notebook</span><iframe src=\"about:blank\" style=\"position:absolute;width:100%;height:100%;left:0;top:0;border:none !important;\" data-html=PCFET0NUWVBFIGh0bWw+CjxoZWFkPiAgICAKICAgIDxtZXRhIGh0dHAtZXF1aXY9ImNvbnRlbnQtdHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiAvPgogICAgCiAgICAgICAgPHNjcmlwdD4KICAgICAgICAgICAgTF9OT19UT1VDSCA9IGZhbHNlOwogICAgICAgICAgICBMX0RJU0FCTEVfM0QgPSBmYWxzZTsKICAgICAgICA8L3NjcmlwdD4KICAgIAogICAgPHN0eWxlPmh0bWwsIGJvZHkge3dpZHRoOiAxMDAlO2hlaWdodDogMTAwJTttYXJnaW46IDA7cGFkZGluZzogMDt9PC9zdHlsZT4KICAgIDxzdHlsZT4jbWFwIHtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MDtib3R0b206MDtyaWdodDowO2xlZnQ6MDt9PC9zdHlsZT4KICAgIDxzY3JpcHQgc3JjPSJodHRwczovL2Nkbi5qc2RlbGl2ci5uZXQvbnBtL2xlYWZsZXRAMS42LjAvZGlzdC9sZWFmbGV0LmpzIj48L3NjcmlwdD4KICAgIDxzY3JpcHQgc3JjPSJodHRwczovL2NvZGUuanF1ZXJ5LmNvbS9qcXVlcnktMS4xMi40Lm1pbi5qcyI+PC9zY3JpcHQ+CiAgICA8c2NyaXB0IHNyYz0iaHR0cHM6Ly9tYXhjZG4uYm9vdHN0cmFwY2RuLmNvbS9ib290c3RyYXAvMy4yLjAvanMvYm9vdHN0cmFwLm1pbi5qcyI+PC9zY3JpcHQ+CiAgICA8c2NyaXB0IHNyYz0iaHR0cHM6Ly9jZG5qcy5jbG91ZGZsYXJlLmNvbS9hamF4L2xpYnMvTGVhZmxldC5hd2Vzb21lLW1hcmtlcnMvMi4wLjIvbGVhZmxldC5hd2Vzb21lLW1hcmtlcnMuanMiPjwvc2NyaXB0PgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJodHRwczovL2Nkbi5qc2RlbGl2ci5uZXQvbnBtL2xlYWZsZXRAMS42LjAvZGlzdC9sZWFmbGV0LmNzcyIvPgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJodHRwczovL21heGNkbi5ib290c3RyYXBjZG4uY29tL2Jvb3RzdHJhcC8zLjIuMC9jc3MvYm9vdHN0cmFwLm1pbi5jc3MiLz4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iaHR0cHM6Ly9tYXhjZG4uYm9vdHN0cmFwY2RuLmNvbS9ib290c3RyYXAvMy4yLjAvY3NzL2Jvb3RzdHJhcC10aGVtZS5taW4uY3NzIi8+CiAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Imh0dHBzOi8vbWF4Y2RuLmJvb3RzdHJhcGNkbi5jb20vZm9udC1hd2Vzb21lLzQuNi4zL2Nzcy9mb250LWF3ZXNvbWUubWluLmNzcyIvPgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJodHRwczovL2NkbmpzLmNsb3VkZmxhcmUuY29tL2FqYXgvbGlicy9MZWFmbGV0LmF3ZXNvbWUtbWFya2Vycy8yLjAuMi9sZWFmbGV0LmF3ZXNvbWUtbWFya2Vycy5jc3MiLz4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iaHR0cHM6Ly9jZG4uanNkZWxpdnIubmV0L2doL3B5dGhvbi12aXN1YWxpemF0aW9uL2ZvbGl1bS9mb2xpdW0vdGVtcGxhdGVzL2xlYWZsZXQuYXdlc29tZS5yb3RhdGUubWluLmNzcyIvPgogICAgCiAgICAgICAgICAgIDxtZXRhIG5hbWU9InZpZXdwb3J0IiBjb250ZW50PSJ3aWR0aD1kZXZpY2Utd2lkdGgsCiAgICAgICAgICAgICAgICBpbml0aWFsLXNjYWxlPTEuMCwgbWF4aW11bS1zY2FsZT0xLjAsIHVzZXItc2NhbGFibGU9bm8iIC8+CiAgICAgICAgICAgIDxzdHlsZT4KICAgICAgICAgICAgICAgICNtYXBfODA1MDcyZjdmNzkxNGM1ZWJiMGY0MDU0M2NmZjFlMDcgewogICAgICAgICAgICAgICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICAgICAgICAgICAgICB3aWR0aDogMTAwLjAlOwogICAgICAgICAgICAgICAgICAgIGhlaWdodDogMTAwLjAlOwogICAgICAgICAgICAgICAgICAgIGxlZnQ6IDAuMCU7CiAgICAgICAgICAgICAgICAgICAgdG9wOiAwLjAlOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICA8L3N0eWxlPgogICAgICAgIAo8L2hlYWQ+Cjxib2R5PiAgICAKICAgIAogICAgICAgICAgICA8ZGl2IGNsYXNzPSJmb2xpdW0tbWFwIiBpZD0ibWFwXzgwNTA3MmY3Zjc5MTRjNWViYjBmNDA1NDNjZmYxZTA3IiA+PC9kaXY+CiAgICAgICAgCjwvYm9keT4KPHNjcmlwdD4gICAgCiAgICAKICAgICAgICAgICAgdmFyIG1hcF84MDUwNzJmN2Y3OTE0YzVlYmIwZjQwNTQzY2ZmMWUwNyA9IEwubWFwKAogICAgICAgICAgICAgICAgIm1hcF84MDUwNzJmN2Y3OTE0YzVlYmIwZjQwNTQzY2ZmMWUwNyIsCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgY2VudGVyOiBbNDUuMCwgMC4wXSwKICAgICAgICAgICAgICAgICAgICBjcnM6IEwuQ1JTLkVQU0czODU3LAogICAgICAgICAgICAgICAgICAgIHpvb206IDQsCiAgICAgICAgICAgICAgICAgICAgem9vbUNvbnRyb2w6IHRydWUsCiAgICAgICAgICAgICAgICAgICAgcHJlZmVyQ2FudmFzOiBmYWxzZSwKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgKTsKCiAgICAgICAgICAgIAoKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgdGlsZV9sYXllcl84ZDViNDNjN2FkNDk0YzVjODU2YzExZjcyNThkYzRjYyA9IEwudGlsZUxheWVyKAogICAgICAgICAgICAgICAgImh0dHBzOi8ve3N9LnRpbGUub3BlbnN0cmVldG1hcC5vcmcve3p9L3t4fS97eX0ucG5nIiwKICAgICAgICAgICAgICAgIHsiYXR0cmlidXRpb24iOiAiRGF0YSBieSBcdTAwMjZjb3B5OyBcdTAwM2NhIGhyZWY9XCJodHRwOi8vb3BlbnN0cmVldG1hcC5vcmdcIlx1MDAzZU9wZW5TdHJlZXRNYXBcdTAwM2MvYVx1MDAzZSwgdW5kZXIgXHUwMDNjYSBocmVmPVwiaHR0cDovL3d3dy5vcGVuc3RyZWV0bWFwLm9yZy9jb3B5cmlnaHRcIlx1MDAzZU9EYkxcdTAwM2MvYVx1MDAzZS4iLCAiZGV0ZWN0UmV0aW5hIjogZmFsc2UsICJtYXhOYXRpdmVab29tIjogMTgsICJtYXhab29tIjogMTgsICJtaW5ab29tIjogMCwgIm5vV3JhcCI6IGZhbHNlLCAib3BhY2l0eSI6IDEsICJzdWJkb21haW5zIjogImFiYyIsICJ0bXMiOiBmYWxzZX0KICAgICAgICAgICAgKS5hZGRUbyhtYXBfODA1MDcyZjdmNzkxNGM1ZWJiMGY0MDU0M2NmZjFlMDcpOwogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBtYXJrZXJfZWE0N2VkYzAyMGJhNDJhNGFmNDM4YTdlOGI0ZGJkYzQgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs0NS4wLCAtMzAuMF0sCiAgICAgICAgICAgICAgICB7fQogICAgICAgICAgICApLmFkZFRvKG1hcF84MDUwNzJmN2Y3OTE0YzVlYmIwZjQwNTQzY2ZmMWUwNyk7CiAgICAgICAgCiAgICAKICAgICAgICB2YXIgcG9wdXBfZmRiOTRkNzY3MDI0NDI4OWIyNDNmMzFkNjUzY2UzMjEgPSBMLnBvcHVwKHsibWF4V2lkdGgiOiAiMTAwJSJ9KTsKCiAgICAgICAgCiAgICAgICAgICAgIHZhciBodG1sX2Q4OTllNWZjYjQyNjRlMzVhOTFkN2NhZjYzYjZhNGEwID0gJChgPGRpdiBpZD0iaHRtbF9kODk5ZTVmY2I0MjY0ZTM1YTkxZDdjYWY2M2I2YTRhMCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+aW5saW5lIGltcGxpY2l0IHBvcHVwPC9kaXY+YClbMF07CiAgICAgICAgICAgIHBvcHVwX2ZkYjk0ZDc2NzAyNDQyODliMjQzZjMxZDY1M2NlMzIxLnNldENvbnRlbnQoaHRtbF9kODk5ZTVmY2I0MjY0ZTM1YTkxZDdjYWY2M2I2YTRhMCk7CiAgICAgICAgCgogICAgICAgIG1hcmtlcl9lYTQ3ZWRjMDIwYmE0MmE0YWY0MzhhN2U4YjRkYmRjNC5iaW5kUG9wdXAocG9wdXBfZmRiOTRkNzY3MDI0NDI4OWIyNDNmMzFkNjUzY2UzMjEpCiAgICAgICAgOwoKICAgICAgICAKICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2EyYmNiOTM2NmEzNTRiMGI4MGY2Yjc2MmY1NDRhODk5ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDUuMCwgLTEwLjBdLAogICAgICAgICAgICAgICAgeyJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwgImNvbG9yIjogIiMzMzg4ZmYiLCAiZGFzaEFycmF5IjogbnVsbCwgImRhc2hPZmZzZXQiOiBudWxsLCAiZmlsbCI6IHRydWUsICJmaWxsQ29sb3IiOiAiIzMzODhmZiIsICJmaWxsT3BhY2l0eSI6IDAuMiwgImZpbGxSdWxlIjogImV2ZW5vZGQiLCAibGluZUNhcCI6ICJyb3VuZCIsICJsaW5lSm9pbiI6ICJyb3VuZCIsICJvcGFjaXR5IjogMS4wLCAicmFkaXVzIjogMjUsICJzdHJva2UiOiB0cnVlLCAid2VpZ2h0IjogM30KICAgICAgICAgICAgKS5hZGRUbyhtYXBfODA1MDcyZjdmNzkxNGM1ZWJiMGY0MDU0M2NmZjFlMDcpOwogICAgICAgIAogICAgCiAgICAgICAgdmFyIHBvcHVwX2YxZmQ1NzcxMDA2YzRlY2Y4NGRjNDRjMTQzYjQ5YzlmID0gTC5wb3B1cCh7Im1heFdpZHRoIjogIjEwMCUifSk7CgogICAgICAgIAogICAgICAgICAgICB2YXIgaHRtbF84YTMwZjhmNWZmMzU0YjcxODYxOWMwMGIwOTFjM2FlNSA9ICQoYDxkaXYgaWQ9Imh0bWxfOGEzMGY4ZjVmZjM1NGI3MTg2MTljMDBiMDkxYzNhZTUiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPmlubGluZSBleHBsaWNpdCBQb3B1cDwvZGl2PmApWzBdOwogICAgICAgICAgICBwb3B1cF9mMWZkNTc3MTAwNmM0ZWNmODRkYzQ0YzE0M2I0OWM5Zi5zZXRDb250ZW50KGh0bWxfOGEzMGY4ZjVmZjM1NGI3MTg2MTljMDBiMDkxYzNhZTUpOwogICAgICAgIAoKICAgICAgICBjaXJjbGVfbWFya2VyX2EyYmNiOTM2NmEzNTRiMGI4MGY2Yjc2MmY1NDRhODk5LmJpbmRQb3B1cChwb3B1cF9mMWZkNTc3MTAwNmM0ZWNmODRkYzQ0YzE0M2I0OWM5ZikKICAgICAgICA7CgogICAgICAgIAogICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvbHlfbGluZV8wMzZlOWViZTY0YzY0MTBlYmUzNTczYTIxNmZkZDNhOSA9IEwucG9seWxpbmUoCiAgICAgICAgICAgICAgICBbWzQzLjAsIDcuMF0sIFs0My4wLCAxMy4wXSwgWzQ3LjAsIDEzLjBdLCBbNDcuMCwgNy4wXSwgWzQzLjAsIDcuMF1dLAogICAgICAgICAgICAgICAgeyJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwgImNvbG9yIjogInJlZCIsICJkYXNoQXJyYXkiOiBudWxsLCAiZGFzaE9mZnNldCI6IG51bGwsICJmaWxsIjogZmFsc2UsICJmaWxsQ29sb3IiOiAicmVkIiwgImZpbGxPcGFjaXR5IjogMC4yLCAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsICJsaW5lQ2FwIjogInJvdW5kIiwgImxpbmVKb2luIjogInJvdW5kIiwgIm5vQ2xpcCI6IGZhbHNlLCAib3BhY2l0eSI6IDEuMCwgInNtb290aEZhY3RvciI6IDEuMCwgInN0cm9rZSI6IHRydWUsICJ3ZWlnaHQiOiAzfQogICAgICAgICAgICApLmFkZFRvKG1hcF84MDUwNzJmN2Y3OTE0YzVlYmIwZjQwNTQzY2ZmMWUwNyk7CiAgICAgICAgCiAgICAKICAgICAgICB2YXIgcG9wdXBfNzVkOWI1NzFkMzkyNDljZThlYWNjM2U1NTU5YTMzODAgPSBMLnBvcHVwKHsibWF4V2lkdGgiOiAiMTAwJSJ9KTsKCiAgICAgICAgCiAgICAgICAgICAgIHZhciBodG1sX2U4Zjk5NmYwY2I3YTRiNDE4ZGUyMDY4MzA0ZTIwZmVkID0gJChgPGRpdiBpZD0iaHRtbF9lOGY5OTZmMGNiN2E0YjQxOGRlMjA2ODMwNGUyMGZlZCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+b3V0bGluZSBQb3B1cCBvbiBQb2x5bGluZTwvZGl2PmApWzBdOwogICAgICAgICAgICBwb3B1cF83NWQ5YjU3MWQzOTI0OWNlOGVhY2MzZTU1NTlhMzM4MC5zZXRDb250ZW50KGh0bWxfZThmOTk2ZjBjYjdhNGI0MThkZTIwNjgzMDRlMjBmZWQpOwogICAgICAgIAoKICAgICAgICBwb2x5X2xpbmVfMDM2ZTllYmU2NGM2NDEwZWJlMzU3M2EyMTZmZGQzYTkuYmluZFBvcHVwKHBvcHVwXzc1ZDliNTcxZDM5MjQ5Y2U4ZWFjYzNlNTU1OWEzMzgwKQogICAgICAgIDsKCiAgICAgICAgCiAgICAKICAgIAogICAgICAgIGZ1bmN0aW9uIGdlb19qc29uX2UzYWYyN2VjMmE5YzQ3MzdhOTlhN2UxZmU4OTY1MjM5X29uRWFjaEZlYXR1cmUoZmVhdHVyZSwgbGF5ZXIpIHsKICAgICAgICAgICAgbGF5ZXIub24oewogICAgICAgICAgICB9KTsKICAgICAgICB9OwogICAgICAgIHZhciBnZW9fanNvbl9lM2FmMjdlYzJhOWM0NzM3YTk5YTdlMWZlODk2NTIzOSA9IEwuZ2VvSnNvbihudWxsLCB7CiAgICAgICAgICAgICAgICBvbkVhY2hGZWF0dXJlOiBnZW9fanNvbl9lM2FmMjdlYzJhOWM0NzM3YTk5YTdlMWZlODk2NTIzOV9vbkVhY2hGZWF0dXJlLAogICAgICAgICAgICAKICAgICAgICB9KTsKCiAgICAgICAgZnVuY3Rpb24gZ2VvX2pzb25fZTNhZjI3ZWMyYTljNDczN2E5OWE3ZTFmZTg5NjUyMzlfYWRkIChkYXRhKSB7CiAgICAgICAgICAgIGdlb19qc29uX2UzYWYyN2VjMmE5YzQ3MzdhOTlhN2UxZmU4OTY1MjM5CiAgICAgICAgICAgICAgICAuYWRkRGF0YShkYXRhKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF84MDUwNzJmN2Y3OTE0YzVlYmIwZjQwNTQzY2ZmMWUwNyk7CiAgICAgICAgfQogICAgICAgICAgICBnZW9fanNvbl9lM2FmMjdlYzJhOWM0NzM3YTk5YTdlMWZlODk2NTIzOV9hZGQoeyJjb29yZGluYXRlcyI6IFtbWzI3LCA0M10sIFszMywgNDNdLCBbMzMsIDQ3XSwgWzI3LCA0N11dXSwgInR5cGUiOiAiUG9seWdvbiJ9KTsKCiAgICAgICAgCiAgICAKICAgICAgICB2YXIgcG9wdXBfY2UzZDIxNWI5MDg0NDk2MTg4NTBkODg0ZjFiY2FlMTEgPSBMLnBvcHVwKHsibWF4V2lkdGgiOiAiMTAwJSJ9KTsKCiAgICAgICAgCiAgICAgICAgICAgIHZhciBodG1sX2U4OTVkOTg4ZmUzNjQ4NTliYTRjMTIyZmJhZjE2MDkyID0gJChgPGRpdiBpZD0iaHRtbF9lODk1ZDk4OGZlMzY0ODU5YmE0YzEyMmZiYWYxNjA5MiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+b3V0bGluZSBQb3B1cCBvbiBHZW9KU09OPC9kaXY+YClbMF07CiAgICAgICAgICAgIHBvcHVwX2NlM2QyMTViOTA4NDQ5NjE4ODUwZDg4NGYxYmNhZTExLnNldENvbnRlbnQoaHRtbF9lODk1ZDk4OGZlMzY0ODU5YmE0YzEyMmZiYWYxNjA5Mik7CiAgICAgICAgCgogICAgICAgIGdlb19qc29uX2UzYWYyN2VjMmE5YzQ3MzdhOTlhN2UxZmU4OTY1MjM5LmJpbmRQb3B1cChwb3B1cF9jZTNkMjE1YjkwODQ0OTYxODg1MGQ4ODRmMWJjYWUxMSkKICAgICAgICA7CgogICAgICAgIAogICAgCjwvc2NyaXB0Pg== onload=\"this.contentDocument.open();this.contentDocument.write(atob(this.getAttribute('data-html')));this.contentDocument.close();\" allowfullscreen webkitallowfullscreen mozallowfullscreen></iframe></div></div>"
      ],
      "text/plain": [
       "<folium.folium.Map at 0x7f62e0764be0>"
      ]
     },
     "execution_count": 1,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "import folium\n",
    "\n",
    "\n",
    "m = folium.Map([45, 0], zoom_start=4)\n",
    "\n",
    "folium.Marker([45, -30], popup=\"inline implicit popup\").add_to(m)\n",
    "\n",
    "folium.CircleMarker(\n",
    "    location=[45, -10],\n",
    "    radius=25,\n",
    "    fill=True,\n",
    "    popup=folium.Popup(\"inline explicit Popup\"),\n",
    ").add_to(m)\n",
    "\n",
    "ls = folium.PolyLine(\n",
    "    locations=[[43, 7], [43, 13], [47, 13], [47, 7], [43, 7]], color=\"red\"\n",
    ")\n",
    "\n",
    "ls.add_child(folium.Popup(\"outline Popup on Polyline\"))\n",
    "ls.add_to(m)\n",
    "\n",
    "gj = folium.GeoJson(\n",
    "    data={\"type\": \"Polygon\", \"coordinates\": [[[27, 43], [33, 43], [33, 47], [27, 47]]]}\n",
    ")\n",
    "\n",
    "gj.add_child(folium.Popup(\"outline Popup on GeoJSON\"))\n",
    "gj.add_to(m)\n",
    "\n",
    "m"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div style=\"width:100%;\"><div style=\"position:relative;width:100%;height:0;padding-bottom:60%;\"><span style=\"color:#565656\">Make this Notebook Trusted to load map: File -> Trust Notebook</span><iframe src=\"about:blank\" style=\"position:absolute;width:100%;height:100%;left:0;top:0;border:none !important;\" data-html=PCFET0NUWVBFIGh0bWw+CjxoZWFkPiAgICAKICAgIDxtZXRhIGh0dHAtZXF1aXY9ImNvbnRlbnQtdHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiAvPgogICAgCiAgICAgICAgPHNjcmlwdD4KICAgICAgICAgICAgTF9OT19UT1VDSCA9IGZhbHNlOwogICAgICAgICAgICBMX0RJU0FCTEVfM0QgPSBmYWxzZTsKICAgICAgICA8L3NjcmlwdD4KICAgIAogICAgPHN0eWxlPmh0bWwsIGJvZHkge3dpZHRoOiAxMDAlO2hlaWdodDogMTAwJTttYXJnaW46IDA7cGFkZGluZzogMDt9PC9zdHlsZT4KICAgIDxzdHlsZT4jbWFwIHtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MDtib3R0b206MDtyaWdodDowO2xlZnQ6MDt9PC9zdHlsZT4KICAgIDxzY3JpcHQgc3JjPSJodHRwczovL2Nkbi5qc2RlbGl2ci5uZXQvbnBtL2xlYWZsZXRAMS42LjAvZGlzdC9sZWFmbGV0LmpzIj48L3NjcmlwdD4KICAgIDxzY3JpcHQgc3JjPSJodHRwczovL2NvZGUuanF1ZXJ5LmNvbS9qcXVlcnktMS4xMi40Lm1pbi5qcyI+PC9zY3JpcHQ+CiAgICA8c2NyaXB0IHNyYz0iaHR0cHM6Ly9tYXhjZG4uYm9vdHN0cmFwY2RuLmNvbS9ib290c3RyYXAvMy4yLjAvanMvYm9vdHN0cmFwLm1pbi5qcyI+PC9zY3JpcHQ+CiAgICA8c2NyaXB0IHNyYz0iaHR0cHM6Ly9jZG5qcy5jbG91ZGZsYXJlLmNvbS9hamF4L2xpYnMvTGVhZmxldC5hd2Vzb21lLW1hcmtlcnMvMi4wLjIvbGVhZmxldC5hd2Vzb21lLW1hcmtlcnMuanMiPjwvc2NyaXB0PgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJodHRwczovL2Nkbi5qc2RlbGl2ci5uZXQvbnBtL2xlYWZsZXRAMS42LjAvZGlzdC9sZWFmbGV0LmNzcyIvPgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJodHRwczovL21heGNkbi5ib290c3RyYXBjZG4uY29tL2Jvb3RzdHJhcC8zLjIuMC9jc3MvYm9vdHN0cmFwLm1pbi5jc3MiLz4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iaHR0cHM6Ly9tYXhjZG4uYm9vdHN0cmFwY2RuLmNvbS9ib290c3RyYXAvMy4yLjAvY3NzL2Jvb3RzdHJhcC10aGVtZS5taW4uY3NzIi8+CiAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Imh0dHBzOi8vbWF4Y2RuLmJvb3RzdHJhcGNkbi5jb20vZm9udC1hd2Vzb21lLzQuNi4zL2Nzcy9mb250LWF3ZXNvbWUubWluLmNzcyIvPgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJodHRwczovL2NkbmpzLmNsb3VkZmxhcmUuY29tL2FqYXgvbGlicy9MZWFmbGV0LmF3ZXNvbWUtbWFya2Vycy8yLjAuMi9sZWFmbGV0LmF3ZXNvbWUtbWFya2Vycy5jc3MiLz4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iaHR0cHM6Ly9jZG4uanNkZWxpdnIubmV0L2doL3B5dGhvbi12aXN1YWxpemF0aW9uL2ZvbGl1bS9mb2xpdW0vdGVtcGxhdGVzL2xlYWZsZXQuYXdlc29tZS5yb3RhdGUubWluLmNzcyIvPgogICAgCiAgICAgICAgICAgIDxtZXRhIG5hbWU9InZpZXdwb3J0IiBjb250ZW50PSJ3aWR0aD1kZXZpY2Utd2lkdGgsCiAgICAgICAgICAgICAgICBpbml0aWFsLXNjYWxlPTEuMCwgbWF4aW11bS1zY2FsZT0xLjAsIHVzZXItc2NhbGFibGU9bm8iIC8+CiAgICAgICAgICAgIDxzdHlsZT4KICAgICAgICAgICAgICAgICNtYXBfMWU1MWQ1NWFjZDY4NDMyNzk4MjRjYzZkNWIzNTgzZDAgewogICAgICAgICAgICAgICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICAgICAgICAgICAgICB3aWR0aDogMTAwLjAlOwogICAgICAgICAgICAgICAgICAgIGhlaWdodDogMTAwLjAlOwogICAgICAgICAgICAgICAgICAgIGxlZnQ6IDAuMCU7CiAgICAgICAgICAgICAgICAgICAgdG9wOiAwLjAlOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICA8L3N0eWxlPgogICAgICAgIAo8L2hlYWQ+Cjxib2R5PiAgICAKICAgIAogICAgICAgICAgICA8ZGl2IGNsYXNzPSJmb2xpdW0tbWFwIiBpZD0ibWFwXzFlNTFkNTVhY2Q2ODQzMjc5ODI0Y2M2ZDViMzU4M2QwIiA+PC9kaXY+CiAgICAgICAgCjwvYm9keT4KPHNjcmlwdD4gICAgCiAgICAKICAgICAgICAgICAgdmFyIG1hcF8xZTUxZDU1YWNkNjg0MzI3OTgyNGNjNmQ1YjM1ODNkMCA9IEwubWFwKAogICAgICAgICAgICAgICAgIm1hcF8xZTUxZDU1YWNkNjg0MzI3OTgyNGNjNmQ1YjM1ODNkMCIsCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgY2VudGVyOiBbNDUuMCwgMC4wXSwKICAgICAgICAgICAgICAgICAgICBjcnM6IEwuQ1JTLkVQU0czODU3LAogICAgICAgICAgICAgICAgICAgIHpvb206IDIsCiAgICAgICAgICAgICAgICAgICAgem9vbUNvbnRyb2w6IHRydWUsCiAgICAgICAgICAgICAgICAgICAgcHJlZmVyQ2FudmFzOiBmYWxzZSwKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgKTsKCiAgICAgICAgICAgIAoKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgdGlsZV9sYXllcl8yMTAzMTZjNjUwYjA0MjdmYjk5M2NhZTU4MjA3Y2VhMyA9IEwudGlsZUxheWVyKAogICAgICAgICAgICAgICAgImh0dHBzOi8ve3N9LnRpbGUub3BlbnN0cmVldG1hcC5vcmcve3p9L3t4fS97eX0ucG5nIiwKICAgICAgICAgICAgICAgIHsiYXR0cmlidXRpb24iOiAiRGF0YSBieSBcdTAwMjZjb3B5OyBcdTAwM2NhIGhyZWY9XCJodHRwOi8vb3BlbnN0cmVldG1hcC5vcmdcIlx1MDAzZU9wZW5TdHJlZXRNYXBcdTAwM2MvYVx1MDAzZSwgdW5kZXIgXHUwMDNjYSBocmVmPVwiaHR0cDovL3d3dy5vcGVuc3RyZWV0bWFwLm9yZy9jb3B5cmlnaHRcIlx1MDAzZU9EYkxcdTAwM2MvYVx1MDAzZS4iLCAiZGV0ZWN0UmV0aW5hIjogZmFsc2UsICJtYXhOYXRpdmVab29tIjogMTgsICJtYXhab29tIjogMTgsICJtaW5ab29tIjogMCwgIm5vV3JhcCI6IGZhbHNlLCAib3BhY2l0eSI6IDEsICJzdWJkb21haW5zIjogImFiYyIsICJ0bXMiOiBmYWxzZX0KICAgICAgICAgICAgKS5hZGRUbyhtYXBfMWU1MWQ1NWFjZDY4NDMyNzk4MjRjYzZkNWIzNTgzZDApOwogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBtYXJrZXJfMGIyZDE4ZWIzZDg0NDNlYTg0NDQ3YmFlNGM2YjZjZTIgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs0NS4wLCAtMTAuMF0sCiAgICAgICAgICAgICAgICB7fQogICAgICAgICAgICApLmFkZFRvKG1hcF8xZTUxZDU1YWNkNjg0MzI3OTgyNGNjNmQ1YjM1ODNkMCk7CiAgICAgICAgCiAgICAKICAgICAgICB2YXIgcG9wdXBfYjU4MzAwN2YyYjhmNDY3OGExZDEzZGE2OWI5MGIyYWEgPSBMLnBvcHVwKHsibWF4V2lkdGgiOiAxMDB9KTsKCiAgICAgICAgCiAgICAgICAgICAgIHZhciBodG1sXzcxMDA3MTM5ODljOTRlZDg5MTg0MWY1MTYyNjI4OTg5ID0gJChgPGRpdiBpZD0iaHRtbF83MTAwNzEzOTg5Yzk0ZWQ4OTE4NDFmNTE2MjYyODk4OSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+TGV0JiMzOTtzIHRyeSBxdW90ZXM8L2Rpdj5gKVswXTsKICAgICAgICAgICAgcG9wdXBfYjU4MzAwN2YyYjhmNDY3OGExZDEzZGE2OWI5MGIyYWEuc2V0Q29udGVudChodG1sXzcxMDA3MTM5ODljOTRlZDg5MTg0MWY1MTYyNjI4OTg5KTsKICAgICAgICAKCiAgICAgICAgbWFya2VyXzBiMmQxOGViM2Q4NDQzZWE4NDQ0N2JhZTRjNmI2Y2UyLmJpbmRQb3B1cChwb3B1cF9iNTgzMDA3ZjJiOGY0Njc4YTFkMTNkYTY5YjkwYjJhYSkKICAgICAgICA7CgogICAgICAgIAogICAgCiAgICAKICAgICAgICAgICAgdmFyIG1hcmtlcl80NDJmMDYxMGNjY2E0YTk4YTdiMDQwNjhkMzZkM2UyNiA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzQ1LjAsIC0zMC4wXSwKICAgICAgICAgICAgICAgIHt9CiAgICAgICAgICAgICkuYWRkVG8obWFwXzFlNTFkNTVhY2Q2ODQzMjc5ODI0Y2M2ZDViMzU4M2QwKTsKICAgICAgICAKICAgIAogICAgICAgIHZhciBwb3B1cF8yMTI5YmQ4MjNhNDI0YmQ2OTAwOTdmYTNmMmZiYTBhNCA9IEwucG9wdXAoeyJtYXhXaWR0aCI6ICIxMDAlIn0pOwoKICAgICAgICAKICAgICAgICAgICAgdmFyIGh0bWxfNTRiZGU2Yjc3NzJkNDdhYmJjYjY5M2U3Y2Y5Zjk0MWUgPSAkKGA8ZGl2IGlkPSJodG1sXzU0YmRlNmI3NzcyZDQ3YWJiY2I2OTNlN2NmOWY5NDFlIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij7Dh2EgYyYjMzk7ZXN0IGNob3VldHRlPC9kaXY+YClbMF07CiAgICAgICAgICAgIHBvcHVwXzIxMjliZDgyM2E0MjRiZDY5MDA5N2ZhM2YyZmJhMGE0LnNldENvbnRlbnQoaHRtbF81NGJkZTZiNzc3MmQ0N2FiYmNiNjkzZTdjZjlmOTQxZSk7CiAgICAgICAgCgogICAgICAgIG1hcmtlcl80NDJmMDYxMGNjY2E0YTk4YTdiMDQwNjhkMzZkM2UyNi5iaW5kUG9wdXAocG9wdXBfMjEyOWJkODIzYTQyNGJkNjkwMDk3ZmEzZjJmYmEwYTQpCiAgICAgICAgOwoKICAgICAgICAKICAgIAo8L3NjcmlwdD4= onload=\"this.contentDocument.open();this.contentDocument.write(atob(this.getAttribute('data-html')));this.contentDocument.close();\" allowfullscreen webkitallowfullscreen mozallowfullscreen></iframe></div></div>"
      ],
      "text/plain": [
       "<folium.folium.Map at 0x7f62e0764520>"
      ]
     },
     "execution_count": 2,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "m = folium.Map([45, 0], zoom_start=2)\n",
    "\n",
    "folium.Marker(\n",
    "    location=[45, -10],\n",
    "    popup=folium.Popup(\"Let's try quotes\", parse_html=True, max_width=100),\n",
    ").add_to(m)\n",
    "\n",
    "folium.Marker(\n",
    "    location=[45, -30],\n",
    "    popup=folium.Popup(u\"Ça c'est chouette\", parse_html=True, max_width=\"100%\"),\n",
    ").add_to(m)\n",
    "\n",
    "m"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Vega Popup\n",
    "\n",
    "You may know that it's possible to create awesome Vega charts with (or without) `vincent`. If you're willing to put one inside a popup, it's possible thanks to `folium.Vega`."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [],
   "source": [
    "import json\n",
    "\n",
    "import numpy as np\n",
    "import vincent\n",
    "\n",
    "scatter_points = {\n",
    "    \"x\": np.random.uniform(size=(100,)),\n",
    "    \"y\": np.random.uniform(size=(100,)),\n",
    "}\n",
    "\n",
    "# Let's create the vincent chart.\n",
    "scatter_chart = vincent.Scatter(scatter_points, iter_idx=\"x\", width=600, height=300)\n",
    "\n",
    "# Let's convert it to JSON.\n",
    "scatter_json = scatter_chart.to_json()\n",
    "\n",
    "# Let's convert it to dict.\n",
    "scatter_dict = json.loads(scatter_json)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div style=\"width:100%;\"><div style=\"position:relative;width:100%;height:0;padding-bottom:60%;\"><span style=\"color:#565656\">Make this Notebook Trusted to load map: File -> Trust Notebook</span><iframe src=\"about:blank\" style=\"position:absolute;width:100%;height:100%;left:0;top:0;border:none !important;\" data-html=PCFET0NUWVBFIGh0bWw+CjxoZWFkPiAgICAKICAgIDxtZXRhIGh0dHAtZXF1aXY9ImNvbnRlbnQtdHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiAvPgogICAgCiAgICAgICAgPHNjcmlwdD4KICAgICAgICAgICAgTF9OT19UT1VDSCA9IGZhbHNlOwogICAgICAgICAgICBMX0RJU0FCTEVfM0QgPSBmYWxzZTsKICAgICAgICA8L3NjcmlwdD4KICAgIAogICAgPHN0eWxlPmh0bWwsIGJvZHkge3dpZHRoOiAxMDAlO2hlaWdodDogMTAwJTttYXJnaW46IDA7cGFkZGluZzogMDt9PC9zdHlsZT4KICAgIDxzdHlsZT4jbWFwIHtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MDtib3R0b206MDtyaWdodDowO2xlZnQ6MDt9PC9zdHlsZT4KICAgIDxzY3JpcHQgc3JjPSJodHRwczovL2Nkbi5qc2RlbGl2ci5uZXQvbnBtL2xlYWZsZXRAMS42LjAvZGlzdC9sZWFmbGV0LmpzIj48L3NjcmlwdD4KICAgIDxzY3JpcHQgc3JjPSJodHRwczovL2NvZGUuanF1ZXJ5LmNvbS9qcXVlcnktMi4xLjAubWluLmpzIj48L3NjcmlwdD4KICAgIDxzY3JpcHQgc3JjPSJodHRwczovL21heGNkbi5ib290c3RyYXBjZG4uY29tL2Jvb3RzdHJhcC8zLjIuMC9qcy9ib290c3RyYXAubWluLmpzIj48L3NjcmlwdD4KICAgIDxzY3JpcHQgc3JjPSJodHRwczovL2NkbmpzLmNsb3VkZmxhcmUuY29tL2FqYXgvbGlicy9MZWFmbGV0LmF3ZXNvbWUtbWFya2Vycy8yLjAuMi9sZWFmbGV0LmF3ZXNvbWUtbWFya2Vycy5qcyI+PC9zY3JpcHQ+CiAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Imh0dHBzOi8vY2RuLmpzZGVsaXZyLm5ldC9ucG0vbGVhZmxldEAxLjYuMC9kaXN0L2xlYWZsZXQuY3NzIi8+CiAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Imh0dHBzOi8vbWF4Y2RuLmJvb3RzdHJhcGNkbi5jb20vYm9vdHN0cmFwLzMuMi4wL2Nzcy9ib290c3RyYXAubWluLmNzcyIvPgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJodHRwczovL21heGNkbi5ib290c3RyYXBjZG4uY29tL2Jvb3RzdHJhcC8zLjIuMC9jc3MvYm9vdHN0cmFwLXRoZW1lLm1pbi5jc3MiLz4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iaHR0cHM6Ly9tYXhjZG4uYm9vdHN0cmFwY2RuLmNvbS9mb250LWF3ZXNvbWUvNC42LjMvY3NzL2ZvbnQtYXdlc29tZS5taW4uY3NzIi8+CiAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Imh0dHBzOi8vY2RuanMuY2xvdWRmbGFyZS5jb20vYWpheC9saWJzL0xlYWZsZXQuYXdlc29tZS1tYXJrZXJzLzIuMC4yL2xlYWZsZXQuYXdlc29tZS1tYXJrZXJzLmNzcyIvPgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJodHRwczovL2Nkbi5qc2RlbGl2ci5uZXQvZ2gvcHl0aG9uLXZpc3VhbGl6YXRpb24vZm9saXVtL2ZvbGl1bS90ZW1wbGF0ZXMvbGVhZmxldC5hd2Vzb21lLnJvdGF0ZS5taW4uY3NzIi8+CiAgICAKICAgICAgICAgICAgPG1ldGEgbmFtZT0idmlld3BvcnQiIGNvbnRlbnQ9IndpZHRoPWRldmljZS13aWR0aCwKICAgICAgICAgICAgICAgIGluaXRpYWwtc2NhbGU9MS4wLCBtYXhpbXVtLXNjYWxlPTEuMCwgdXNlci1zY2FsYWJsZT1ubyIgLz4KICAgICAgICAgICAgPHN0eWxlPgogICAgICAgICAgICAgICAgI21hcF81MTE3YjcyMGM3ZTQ0N2Y4YjBlZTMyYjg2ZjU4ODAzYSB7CiAgICAgICAgICAgICAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICAgICAgICAgICAgICAgIHdpZHRoOiAxMDAuMCU7CiAgICAgICAgICAgICAgICAgICAgaGVpZ2h0OiAxMDAuMCU7CiAgICAgICAgICAgICAgICAgICAgbGVmdDogMC4wJTsKICAgICAgICAgICAgICAgICAgICB0b3A6IDAuMCU7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIDwvc3R5bGU+CiAgICAgICAgCiAgICA8c2NyaXB0IHNyYz0iaHR0cHM6Ly9jZG5qcy5jbG91ZGZsYXJlLmNvbS9hamF4L2xpYnMvZDMvMy41LjUvZDMubWluLmpzIj48L3NjcmlwdD4KICAgIDxzY3JpcHQgc3JjPSJodHRwczovL2NkbmpzLmNsb3VkZmxhcmUuY29tL2FqYXgvbGlicy92ZWdhLzEuNC4zL3ZlZ2EubWluLmpzIj48L3NjcmlwdD4KICAgIAogICAgICAgICAgICA8c3R5bGU+ICN2ZWdhXzBlMzAyMTg0ODYxMjQ3YjBhZDRiZmFkZGY0YzFhN2I4IHsKICAgICAgICAgICAgICAgIHBvc2l0aW9uIDogcmVsYXRpdmU7CiAgICAgICAgICAgICAgICB3aWR0aCA6IDY1MC4wcHg7CiAgICAgICAgICAgICAgICBoZWlnaHQ6IDM1MC4wcHg7CiAgICAgICAgICAgICAgICBsZWZ0OiAwLjAlOwogICAgICAgICAgICAgICAgdG9wOiAwLjAlOwogICAgICAgICAgICA8L3N0eWxlPgogICAgICAgICAgICAKICAgIAogICAgICAgICAgICA8c3R5bGU+ICN2ZWdhX2Y5OGQ2ZDQwNmJhZDRhNGE5Y2RlOTFkZTBjZjEyZmJhIHsKICAgICAgICAgICAgICAgIHBvc2l0aW9uIDogcmVsYXRpdmU7CiAgICAgICAgICAgICAgICB3aWR0aCA6IDY1MC4wcHg7CiAgICAgICAgICAgICAgICBoZWlnaHQ6IDM1MC4wcHg7CiAgICAgICAgICAgICAgICBsZWZ0OiAwLjAlOwogICAgICAgICAgICAgICAgdG9wOiAwLjAlOwogICAgICAgICAgICA8L3N0eWxlPgogICAgICAgICAgICAKICAgIAogICAgICAgICAgICA8c3R5bGU+ICN2ZWdhX2YxZmRkNzVmM2EzNzQxNDQ5MWMwNTk3YjdhNjg5Y2VjIHsKICAgICAgICAgICAgICAgIHBvc2l0aW9uIDogcmVsYXRpdmU7CiAgICAgICAgICAgICAgICB3aWR0aCA6IDY1MC4wcHg7CiAgICAgICAgICAgICAgICBoZWlnaHQ6IDM1MC4wcHg7CiAgICAgICAgICAgICAgICBsZWZ0OiAwLjAlOwogICAgICAgICAgICAgICAgdG9wOiAwLjAlOwogICAgICAgICAgICA8L3N0eWxlPgogICAgICAgICAgICAKPC9oZWFkPgo8Ym9keT4gICAgCiAgICAKICAgICAgICAgICAgPGRpdiBjbGFzcz0iZm9saXVtLW1hcCIgaWQ9Im1hcF81MTE3YjcyMGM3ZTQ0N2Y4YjBlZTMyYjg2ZjU4ODAzYSIgPjwvZGl2PgogICAgICAgIAo8L2JvZHk+CjxzY3JpcHQ+ICAgIAogICAgCiAgICAgICAgICAgIHZhciBtYXBfNTExN2I3MjBjN2U0NDdmOGIwZWUzMmI4NmY1ODgwM2EgPSBMLm1hcCgKICAgICAgICAgICAgICAgICJtYXBfNTExN2I3MjBjN2U0NDdmOGIwZWUzMmI4NmY1ODgwM2EiLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGNlbnRlcjogWzQzLjAsIC0xMDAuMF0sCiAgICAgICAgICAgICAgICAgICAgY3JzOiBMLkNSUy5FUFNHMzg1NywKICAgICAgICAgICAgICAgICAgICB6b29tOiA0LAogICAgICAgICAgICAgICAgICAgIHpvb21Db250cm9sOiB0cnVlLAogICAgICAgICAgICAgICAgICAgIHByZWZlckNhbnZhczogZmFsc2UsCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICk7CgogICAgICAgICAgICAKCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHRpbGVfbGF5ZXJfMWYzZmE3OTljMzFhNDdhYTk4YzYyNWM2ZjY3NGZkOWUgPSBMLnRpbGVMYXllcigKICAgICAgICAgICAgICAgICJodHRwczovL3tzfS50aWxlLm9wZW5zdHJlZXRtYXAub3JnL3t6fS97eH0ve3l9LnBuZyIsCiAgICAgICAgICAgICAgICB7ImF0dHJpYnV0aW9uIjogIkRhdGEgYnkgXHUwMDI2Y29weTsgXHUwMDNjYSBocmVmPVwiaHR0cDovL29wZW5zdHJlZXRtYXAub3JnXCJcdTAwM2VPcGVuU3RyZWV0TWFwXHUwMDNjL2FcdTAwM2UsIHVuZGVyIFx1MDAzY2EgaHJlZj1cImh0dHA6Ly93d3cub3BlbnN0cmVldG1hcC5vcmcvY29weXJpZ2h0XCJcdTAwM2VPRGJMXHUwMDNjL2FcdTAwM2UuIiwgImRldGVjdFJldGluYSI6IGZhbHNlLCAibWF4TmF0aXZlWm9vbSI6IDE4LCAibWF4Wm9vbSI6IDE4LCAibWluWm9vbSI6IDAsICJub1dyYXAiOiBmYWxzZSwgIm9wYWNpdHkiOiAxLCAic3ViZG9tYWlucyI6ICJhYmMiLCAidG1zIjogZmFsc2V9CiAgICAgICAgICAgICkuYWRkVG8obWFwXzUxMTdiNzIwYzdlNDQ3ZjhiMGVlMzJiODZmNTg4MDNhKTsKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgbWFya2VyXzdmYTJlNDk5YmQzZjQ0NmRiMzdiYjU3OWQyYzFlM2FhID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbMzAuMCwgLTEyMC4wXSwKICAgICAgICAgICAgICAgIHt9CiAgICAgICAgICAgICkuYWRkVG8obWFwXzUxMTdiNzIwYzdlNDQ3ZjhiMGVlMzJiODZmNTg4MDNhKTsKICAgICAgICAKICAgIGZ1bmN0aW9uIHZlZ2FfcGFyc2Uoc3BlYywgZGl2KSB7CiAgICAgICAgICAgIHZnLnBhcnNlLnNwZWMoc3BlYywgZnVuY3Rpb24oY2hhcnQpIHsgY2hhcnQoe2VsOmRpdn0pLnVwZGF0ZSgpOyB9KTt9CiAgICAKICAgICAgICB2YXIgcG9wdXBfMDg2NTU2NDAzNjYwNGZiY2FlNjkzYjdhNGUwMjZiMGEgPSBMLnBvcHVwKHsibWF4V2lkdGgiOiAiMTAwJSJ9KTsKCiAgICAgICAgCiAgICAgICAgICAgIHZhciB2ZWdhXzBlMzAyMTg0ODYxMjQ3YjBhZDRiZmFkZGY0YzFhN2I4ID0gJChgICAgICAgICAgICAgIDxkaXYgaWQ9InZlZ2FfMGUzMDIxODQ4NjEyNDdiMGFkNGJmYWRkZjRjMWE3YjgiPjwvZGl2PiAgICAgICAgICAgICBgKVswXTsKICAgICAgICAgICAgcG9wdXBfMDg2NTU2NDAzNjYwNGZiY2FlNjkzYjdhNGUwMjZiMGEuc2V0Q29udGVudCh2ZWdhXzBlMzAyMTg0ODYxMjQ3YjBhZDRiZmFkZGY0YzFhN2I4KTsKICAgICAgICAKCiAgICAgICAgbWFya2VyXzdmYTJlNDk5YmQzZjQ0NmRiMzdiYjU3OWQyYzFlM2FhLmJpbmRQb3B1cChwb3B1cF8wODY1NTY0MDM2NjA0ZmJjYWU2OTNiN2E0ZTAyNmIwYSkKICAgICAgICA7CgogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgdmVnYV9wYXJzZSh7ImF4ZXMiOiBbeyJzY2FsZSI6ICJ4IiwgInR5cGUiOiAieCJ9LCB7InNjYWxlIjogInkiLCAidHlwZSI6ICJ5In1dLCAiZGF0YSI6IFt7Im5hbWUiOiAidGFibGUiLCAidmFsdWVzIjogW3siY29sIjogInkiLCAiaWR4IjogMC42NDQyODkwNzU0Njc0NzkzLCAidmFsIjogMC40NjMyODg0NDA2ODE2NjU5N30sIHsiY29sIjogInkiLCAiaWR4IjogMC4zMTIzNjcyMDI5NTM0MDI2LCAidmFsIjogMC4xNzgyOTc2MDk0OTIwOTU1fSwgeyJjb2wiOiAieSIsICJpZHgiOiAwLjY1OTAwODA4OTExMjQ2MDIsICJ2YWwiOiAwLjk1MjcwNDM3MjgxOTQ2MjZ9LCB7ImNvbCI6ICJ5IiwgImlkeCI6IDAuMjkyMjY0MzU1MjYwNzMwNiwgInZhbCI6IDAuODE2MzQ5MDIzNzg0MjgxNX0sIHsiY29sIjogInkiLCAiaWR4IjogMC41MDU5MTU2ODQ3NDEyODU4LCAidmFsIjogMC45MDU3NjkzOTM4MDQ5NTkyfSwgeyJjb2wiOiAieSIsICJpZHgiOiAwLjUyNDAwMjk3MzA0MTQ0MjcsICJ2YWwiOiAwLjQyNjQ5NDU0NTc4NDY3ODh9LCB7ImNvbCI6ICJ5IiwgImlkeCI6IDAuNTk0NjkwODYzMzIzNzEwMiwgInZhbCI6IDAuODIyMTg5MDc2NjQ2MTk3MX0sIHsiY29sIjogInkiLCAiaWR4IjogMC44NzE2NDQ1ODc2MTY2NTMzLCAidmFsIjogMC44OTc1NTg0NTEwNjQ4MzkyfSwgeyJjb2wiOiAieSIsICJpZHgiOiAwLjM5NDAxMjEzNjU1MTUxMTEsICJ2YWwiOiAwLjY5MTE2MDY3NDE4MzcxODV9LCB7ImNvbCI6ICJ5IiwgImlkeCI6IDAuMzg3MTc4Njc2MTg2ODM4NDMsICJ2YWwiOiAwLjI2NTA4ODQxMDAyMjY3NzM2fSwgeyJjb2wiOiAieSIsICJpZHgiOiAwLjc0ODUxMzcwNjkxNzIwNzgsICJ2YWwiOiAwLjM0ODkxMjY3NDkzMTE2MDN9LCB7ImNvbCI6ICJ5IiwgImlkeCI6IDAuMTQ3Mzc5NjMzNzE1MTE4NDIsICJ2YWwiOiAwLjEyNTk1MDA4ODM5NjYwNjZ9LCB7ImNvbCI6ICJ5IiwgImlkeCI6IDAuMDYzMjUxMzYwMTU3NDM4NzEsICJ2YWwiOiAwLjA1NDgzODQ2NTY4MjA5MDcyfSwgeyJjb2wiOiAieSIsICJpZHgiOiAwLjA0NzIzMDA1OTA0MTY1MTAxLCAidmFsIjogMC42NTAyNTk1NDc1OTQ0Mzg0fSwgeyJjb2wiOiAieSIsICJpZHgiOiAwLjI5ODg0NTQ1Mzk5NTQ0OTcsICJ2YWwiOiAwLjU5NTEzMTg1MTU3NjY5NX0sIHsiY29sIjogInkiLCAiaWR4IjogMC4zMzk4MDA0ODc5NTY2MTcxLCAidmFsIjogMC4yOTkyMzU3NDUwMjQ5MDMzNX0sIHsiY29sIjogInkiLCAiaWR4IjogMC42NDI4MTYxMzExNDMyMDYsICJ2YWwiOiAwLjgxOTE4NjM2MTE3NTA2MDh9LCB7ImNvbCI6ICJ5IiwgImlkeCI6IDAuNjA4MTE1MDUxMzI3NTU4OSwgInZhbCI6IDAuOTQxMTU2MDM5MTIxNzk5fSwgeyJjb2wiOiAieSIsICJpZHgiOiAwLjQxMDU5NzgwNDAwMDA5NTI3LCAidmFsIjogMC44OTQ4MzUxMjI4MjA5MjQ0fSwgeyJjb2wiOiAieSIsICJpZHgiOiAwLjEzMzg3MjQ2NTI4NTM3OTIyLCAidmFsIjogMC4wNzg0NzAyNjQ1NTY5MTQ5N30sIHsiY29sIjogInkiLCAiaWR4IjogMC4zNjcyMjMzNTI2MzQ1NDg2NCwgInZhbCI6IDAuNDY3Nzc4NTkxNjU0MzQxNTV9LCB7ImNvbCI6ICJ5IiwgImlkeCI6IDAuMTM2OTIwNDk2NTkyMzU2MDYsICJ2YWwiOiAwLjMyOTM4ODg3MjQ4MzMxMjN9LCB7ImNvbCI6ICJ5IiwgImlkeCI6IDAuMzEwMTg5MDYzNzk0MjcwNywgInZhbCI6IDAuODMwNTgwNzUzMjkxNTg1Nn0sIHsiY29sIjogInkiLCAiaWR4IjogMC43ODM5NjcyMDA4OTEyMDE1LCAidmFsIjogMC40NjkxNzY1NjQ3NTIxMjIyfSwgeyJjb2wiOiAieSIsICJpZHgiOiAwLjUxMzY3NzQ0MjYwOTkxNCwgInZhbCI6IDAuODA2MzM5MTcwMDI4NDMyOX0sIHsiY29sIjogInkiLCAiaWR4IjogMC42NDYxODAzNTgwNTA3Mjk0LCAidmFsIjogMC4yMjA2NzAyOTM3NjUxNTEwMn0sIHsiY29sIjogInkiLCAiaWR4IjogMC43MzQwOTYzOTA4MDc3NTI3LCAidmFsIjogMC4wMTY5MjkyMTQ1MDI0NTY5OX0sIHsiY29sIjogInkiLCAiaWR4IjogMC45NTc4NjEzOTE1ODEwNTgyLCAidmFsIjogMC40MTkyMjY3NTIyMTgxOTM5NH0sIHsiY29sIjogInkiLCAiaWR4IjogMC42MTY5MzA4NDkyODEzNjE1LCAidmFsIjogMC42NjQ0ODc2OTk4NDgwOTI0fSwgeyJjb2wiOiAieSIsICJpZHgiOiAwLjYxMDczMzcwMDg3OTU2OTksICJ2YWwiOiAwLjMzMDcxMDUyOTYwNDk0Nzg0fSwgeyJjb2wiOiAieSIsICJpZHgiOiAwLjM3MjY5OTMxMTU2ODg3MzI2LCAidmFsIjogMC4zODY5MDkwMTMzNTE4MzQwM30sIHsiY29sIjogInkiLCAiaWR4IjogMC40MzAyMDExODQ0NzQ2ODcyNSwgInZhbCI6IDAuOTAyOTAzMDg0NTMyNzA0M30sIHsiY29sIjogInkiLCAiaWR4IjogMC45MzIzMDQ4ODQyNDk4MTczLCAidmFsIjogMC41NjE3NzUzMjkxOTM1MjM4fSwgeyJjb2wiOiAieSIsICJpZHgiOiAwLjczODgxMTM0NDg0NDM4NTQsICJ2YWwiOiAwLjcyNTU2NzgyNTcwNzQ4Mzh9LCB7ImNvbCI6ICJ5IiwgImlkeCI6IDAuMzY0ODc0MTc5NDUwNTc2LCAidmFsIjogMC42Mzg0OTEzOTg4NDIzNDY3fSwgeyJjb2wiOiAieSIsICJpZHgiOiAwLjM4MzU2ODM5NjE0OTkxOTEsICJ2YWwiOiAwLjgyNzY2OTkyNDg0ODI0MzN9LCB7ImNvbCI6ICJ5IiwgImlkeCI6IDAuNzU3ODc3Nzk3MjAxOTg2NiwgInZhbCI6IDAuMTQxMDU3OTk0MDkxMjMyMX0sIHsiY29sIjogInkiLCAiaWR4IjogMC4wMTg5NTg3MTE5OTk0MDg5MDYsICJ2YWwiOiAwLjgxMDUxNTExNjIwMjc4NX0sIHsiY29sIjogInkiLCAiaWR4IjogMC42NDkwMzE1NzYxNDA1MzU1LCAidmFsIjogMC4zMTQ4ODc5MTczNDQ1ODM1NX0sIHsiY29sIjogInkiLCAiaWR4IjogMC4zOTYwNDk2MzY4Mzc5NDczNiwgInZhbCI6IDAuODkzMDMzMjA5NzU4OTk2N30sIHsiY29sIjogInkiLCAiaWR4IjogMC4zNjU2ODA5MTM4MzQxNTQ2LCAidmFsIjogMC43NDIxOTc2NzY5ODYzMDkxfSwgeyJjb2wiOiAieSIsICJpZHgiOiAwLjI2NzMwNjI3MDk3MjQ0MTQsICJ2YWwiOiAwLjIxODIyODQ5ODgyOTI5MjR9LCB7ImNvbCI6ICJ5IiwgImlkeCI6IDAuMzU5Nzk4NTUzNjczOTIwOCwgInZhbCI6IDAuMDg3ODUxMjQ2ODcwMjgwNDV9LCB7ImNvbCI6ICJ5IiwgImlkeCI6IDAuMDM3NDE1NDE1NjQyOTgwMDEsICJ2YWwiOiAwLjA1MDAxNTQ5NzY3ODYwNTh9LCB7ImNvbCI6ICJ5IiwgImlkeCI6IDAuMTIxMzYzOTg4MTY3MzkyMzYsICJ2YWwiOiAwLjA3MTU5MzgyNTU1Njg2ODQ0fSwgeyJjb2wiOiAieSIsICJpZHgiOiAwLjE1MDIwMjYwMjA2MDY5OTM1LCAidmFsIjogMC42OTE0NTQ0MjYyMDE0MDM3fSwgeyJjb2wiOiAieSIsICJpZHgiOiAwLjg5MTc5NTAyMjY2MjI3NDIsICJ2YWwiOiAwLjkwNDA4OTA2Mzk4NzAyMDV9LCB7ImNvbCI6ICJ5IiwgImlkeCI6IDAuMTY4MDAwNDM4NDI2ODkyNiwgInZhbCI6IDAuODQ4NTYxNjQzNjI4MDEyM30sIHsiY29sIjogInkiLCAiaWR4IjogMC42NTEwNzAyODQ1MTg4MTIzLCAidmFsIjogMC43ODEwNTgzNzM0OTEwMDgyfSwgeyJjb2wiOiAieSIsICJpZHgiOiAwLjIxMTI0NDUyMDk2ODk4MjA1LCAidmFsIjogMC4xMTQyNjE2Nzg1NDY4MjAzNH0sIHsiY29sIjogInkiLCAiaWR4IjogMC4wMDQ0NDM1MjU1NDQwODE2NzIsICJ2YWwiOiAwLjgyMzAwNDA4MDEwNzk3MjN9LCB7ImNvbCI6ICJ5IiwgImlkeCI6IDAuMjY5Mzg0OTgzMjU0NjcxLCAidmFsIjogMC43Mjc2NjY1MzcyODgyMTh9LCB7ImNvbCI6ICJ5IiwgImlkeCI6IDAuMzE3NTI5MTExMDM2MDU1NSwgInZhbCI6IDAuMTI5MDQ4NTI1OTM5MjAzNTd9LCB7ImNvbCI6ICJ5IiwgImlkeCI6IDAuOTk3NjMwNTUyODU4NzYxOCwgInZhbCI6IDAuNjEwMDk2OTE1OTY4MjkxfSwgeyJjb2wiOiAieSIsICJpZHgiOiAwLjY3NDE0MTM2Nzk3NjE1NjYsICJ2YWwiOiAwLjE1MDA3MjIyNTkyNDAzOTI0fSwgeyJjb2wiOiAieSIsICJpZHgiOiAwLjE2ODY0MTU0NjkzMDIwNDgzLCAidmFsIjogMC4yNTg5MzQ5MjA5OTUwMTI3fSwgeyJjb2wiOiAieSIsICJpZHgiOiAwLjc0MjQ2ODI5NTc1NjU5MzYsICJ2YWwiOiAwLjcyMDQ2MDA3OTIzMjQ0MzV9LCB7ImNvbCI6ICJ5IiwgImlkeCI6IDAuNjg4NjEyNzY0ODQ5MzA2NywgInZhbCI6IDAuMDc5Mjk1OTgzNDUxODI2MDl9LCB7ImNvbCI6ICJ5IiwgImlkeCI6IDAuMzY2NTQ4Nzk2Njg1NjMwNywgInZhbCI6IDAuNDgxNDA2MDY4NDQ3MTY0MTZ9LCB7ImNvbCI6ICJ5IiwgImlkeCI6IDAuODU1NTIwMzIzNjc5OTY2OSwgInZhbCI6IDAuMDY0MzI3MTY4MzUwNzkyMzN9LCB7ImNvbCI6ICJ5IiwgImlkeCI6IDAuMjMzMjI5MTU1MjAyOTA1LCAidmFsIjogMC41NTQxMTIwODE3NDU0ODY3fSwgeyJjb2wiOiAieSIsICJpZHgiOiAwLjEwMjQ3NTE4OTEzMjAzMjU3LCAidmFsIjogMC4zODY4MzQ0NjQ1NDI3NDM5NX0sIHsiY29sIjogInkiLCAiaWR4IjogMC43NzIzMDY1NDYyOTIxODgyLCAidmFsIjogMC40MjAxNzA4MjYxODAyOTA0NX0sIHsiY29sIjogInkiLCAiaWR4IjogMC4wMTY0NDU5NDU0MDE3NzkxMjcsICJ2YWwiOiAwLjg5NTUyOTkxMTE0MTI0N30sIHsiY29sIjogInkiLCAiaWR4IjogMC41Mjk3OTg3NDIzOTU1NDMxLCAidmFsIjogMC40NDEwMzE5MzA0ODk2MTk3NX0sIHsiY29sIjogInkiLCAiaWR4IjogMC4wNzk1MzYyMjM2NzU4NzU4NywgInZhbCI6IDAuMDM4OTQzOTc4NDIzNTg2ODh9LCB7ImNvbCI6ICJ5IiwgImlkeCI6IDAuNTMxNDgzMjExNDYzMjMwMiwgInZhbCI6IDAuNzI0MTg0OTgwOTA1NzU4OX0sIHsiY29sIjogInkiLCAiaWR4IjogMC45MTg1MDkwODYwNjAzMjYzLCAidmFsIjogMC4yMzUzNTMwNzcxNjIwNjQyMn0sIHsiY29sIjogInkiLCAiaWR4IjogMC43NDE1MTMyMDg2ODE5NzYyLCAidmFsIjogMC43MjU4Njc0MzUzNDQ1Mjh9LCB7ImNvbCI6ICJ5IiwgImlkeCI6IDAuODc3NTM5NTQxODg5OTIwMiwgInZhbCI6IDAuMTYyODczMDA4NTUwODg4Nn0sIHsiY29sIjogInkiLCAiaWR4IjogMC42MzgxMjE5ODg3MTAyODM3LCAidmFsIjogMC40ODg2MDUyNTIwODExNzk0NH0sIHsiY29sIjogInkiLCAiaWR4IjogMC41ODA5NDM2MjgyMjExMDUxLCAidmFsIjogMC4zNjE5NzY1MTE2Nzk0NTM0NH0sIHsiY29sIjogInkiLCAiaWR4IjogMC4yNjUwNDUxMTAxOTc3Njk2NiwgInZhbCI6IDAuNjczMTM2NDA1MDAzNDg1OX0sIHsiY29sIjogInkiLCAiaWR4IjogMC44OTA4ODM1NzY4NTI5NzQ3LCAidmFsIjogMC4zMDYyMTU1MzI0MzE1ODQzfSwgeyJjb2wiOiAieSIsICJpZHgiOiAwLjI0NDYyMzM5NDE0MzA4NDc2LCAidmFsIjogMC4zODM0ODg3NjMwNjM5ODUyN30sIHsiY29sIjogInkiLCAiaWR4IjogMC42OTEzMjYyNTc0NzgzNzM0LCAidmFsIjogMC4wOTQ5MzYyNjI2ODE4OTMxNX0sIHsiY29sIjogInkiLCAiaWR4IjogMC4zMjk3MjE5OTAyMjA1OTk2NywgInZhbCI6IDAuNDA1MzM0OTAwNDM1MTU0NX0sIHsiY29sIjogInkiLCAiaWR4IjogMC43MTA2MzE4NzU1MjQ5MywgInZhbCI6IDAuMTQ4NTc1Njc1NTU2NzAwMjZ9LCB7ImNvbCI6ICJ5IiwgImlkeCI6IDAuNTY4OTg4MDMwNTU1MjE5MywgInZhbCI6IDAuNzcwODA3Njc1OTU1NjQ5OH0sIHsiY29sIjogInkiLCAiaWR4IjogMC43NzYzNTk2NDg4NjAxNTI3LCAidmFsIjogMC43MDAzNDA3NTkzNTE1MzMxfSwgeyJjb2wiOiAieSIsICJpZHgiOiAwLjI1MDg0MjQ2ODAwODU1ODksICJ2YWwiOiAwLjI2MTM2OTg3NTA1MDA4MX0sIHsiY29sIjogInkiLCAiaWR4IjogMC45OTk2NDc0MTE2ODI0NzQ2LCAidmFsIjogMC41MjE4Nzc0NjM5NDM1NzMzfSwgeyJjb2wiOiAieSIsICJpZHgiOiAwLjY2NDM1NzY3NzQ1NDEwNjksICJ2YWwiOiAwLjg4MzIzMTU0MTg0MTA0NDF9LCB7ImNvbCI6ICJ5IiwgImlkeCI6IDAuOTI5Njc5NzcxMTQ4NTk0OCwgInZhbCI6IDAuNTMyNDMwMDYyNTMxNTQ0NX0sIHsiY29sIjogInkiLCAiaWR4IjogMC4yNDY0OTQxNzI3ODk0NTgzLCAidmFsIjogMC4xOTA5MjI3Mzc5NjU0OTE1M30sIHsiY29sIjogInkiLCAiaWR4IjogMC45MDYyOTEwNTYyOTgzNzk4LCAidmFsIjogMC41MzMzNzMxMDYzMTMyNTkyfSwgeyJjb2wiOiAieSIsICJpZHgiOiAwLjkxNzc0MTgxNDIyODI0NDcsICJ2YWwiOiAwLjk3MjY3NTk2ODA0NzgxODh9LCB7ImNvbCI6ICJ5IiwgImlkeCI6IDAuMjY1OTcwODk0NjY2MDUzNywgInZhbCI6IDAuMzcxMDk3ODE0Njg5OTc4N30sIHsiY29sIjogInkiLCAiaWR4IjogMC41MDUwNDE4MTkyNTg4MTE4LCAidmFsIjogMC4zMTMzMTMxNjI1MTI2MDk5fSwgeyJjb2wiOiAieSIsICJpZHgiOiAwLjUzMTE5MzIzMjYwMTE2NDEsICJ2YWwiOiAwLjMyNTUwNTA1NTY4MDU4MDN9LCB7ImNvbCI6ICJ5IiwgImlkeCI6IDAuNzUyMjgyNzU3NTQ4MjIxNiwgInZhbCI6IDAuODk5NjY2NTU3MDU3MDM5OH0sIHsiY29sIjogInkiLCAiaWR4IjogMC4xNjc5OTYwNjg3NzYyNjgxNiwgInZhbCI6IDAuODE0MjIyNDUzNzY3NDY2Mn0sIHsiY29sIjogInkiLCAiaWR4IjogMC4yNDY1MTIzNjc3NDMyNjQyNCwgInZhbCI6IDAuODMwNjM5OTgxMTU2MzkyNX0sIHsiY29sIjogInkiLCAiaWR4IjogMC42MDU5NTk3MjkzNjM2Mzc0LCAidmFsIjogMC4xOTQxNjU2NDcxNjE1NjQ3fSwgeyJjb2wiOiAieSIsICJpZHgiOiAwLjQ3MTIyOTQ4MTQ0OTk1MTQ3LCAidmFsIjogMC4xMDQ1OTI4OTQxNDI5NjA4fSwgeyJjb2wiOiAieSIsICJpZHgiOiAwLjk4MzMxMDU2Nzc3Mzc0MTQsICJ2YWwiOiAwLjQxNjkzMjE3NDI5MjYyOTV9LCB7ImNvbCI6ICJ5IiwgImlkeCI6IDAuMDY0MTA3Njc5MTgwNTMwMTcsICJ2YWwiOiAwLjY4MDg2NzI5NjAwNjI1MTR9LCB7ImNvbCI6ICJ5IiwgImlkeCI6IDAuODY2NDc2MzMxMDI0NjI0NiwgInZhbCI6IDAuMjA4NDQzODk2ODg3OTYyMDV9LCB7ImNvbCI6ICJ5IiwgImlkeCI6IDAuOTcwNTAwMTc4MzQ1MDMzOCwgInZhbCI6IDAuNjA5NTM2MTE3MTAzNjI5OX0sIHsiY29sIjogInkiLCAiaWR4IjogMC45MDY3MjA0NTY5MzM0MzE4LCAidmFsIjogMC4wNjMwNTY4MTYzODYyNDkxNn1dfV0sICJoZWlnaHQiOiAzMDAsICJsZWdlbmRzIjogW10sICJtYXJrcyI6IFt7ImZyb20iOiB7ImRhdGEiOiAidGFibGUiLCAidHJhbnNmb3JtIjogW3sia2V5cyI6IFsiZGF0YS5jb2wiXSwgInR5cGUiOiAiZmFjZXQifV19LCAibWFya3MiOiBbeyJwcm9wZXJ0aWVzIjogeyJlbnRlciI6IHsiZmlsbCI6IHsiZmllbGQiOiAiZGF0YS5jb2wiLCAic2NhbGUiOiAiY29sb3IifSwgInNpemUiOiB7InZhbHVlIjogMTAwfSwgIngiOiB7ImZpZWxkIjogImRhdGEuaWR4IiwgInNjYWxlIjogIngifSwgInkiOiB7ImZpZWxkIjogImRhdGEudmFsIiwgInNjYWxlIjogInkifX19LCAidHlwZSI6ICJzeW1ib2wifV0sICJ0eXBlIjogImdyb3VwIn1dLCAicGFkZGluZyI6ICJhdXRvIiwgInNjYWxlcyI6IFt7ImRvbWFpbiI6IHsiZGF0YSI6ICJ0YWJsZSIsICJmaWVsZCI6ICJkYXRhLmlkeCJ9LCAibmFtZSI6ICJ4IiwgInJhbmdlIjogIndpZHRoIiwgInR5cGUiOiAibGluZWFyIn0sIHsiZG9tYWluIjogeyJkYXRhIjogInRhYmxlIiwgImZpZWxkIjogImRhdGEudmFsIn0sICJuYW1lIjogInkiLCAibmljZSI6IHRydWUsICJyYW5nZSI6ICJoZWlnaHQifSwgeyJkb21haW4iOiB7ImRhdGEiOiAidGFibGUiLCAiZmllbGQiOiAiZGF0YS5jb2wifSwgIm5hbWUiOiAiY29sb3IiLCAicmFuZ2UiOiAiY2F0ZWdvcnkyMCIsICJ0eXBlIjogIm9yZGluYWwifV0sICJ3aWR0aCI6IDYwMH0sdmVnYV8wZTMwMjE4NDg2MTI0N2IwYWQ0YmZhZGRmNGMxYTdiOCk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAKICAgICAgICAgICAgdmFyIG1hcmtlcl9iYmQzYWMyYWVkZjY0ZGEzYmUyMjhiNTMwYWU5OGFiNCA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzMwLjAsIC0xMDAuMF0sCiAgICAgICAgICAgICAgICB7fQogICAgICAgICAgICApLmFkZFRvKG1hcF81MTE3YjcyMGM3ZTQ0N2Y4YjBlZTMyYjg2ZjU4ODAzYSk7CiAgICAgICAgCiAgICAKICAgICAgICB2YXIgcG9wdXBfYjc5ZjIxNDVlMjQ2NDk3NWIwODdkZDAyNDAxMDFkYjEgPSBMLnBvcHVwKHsibWF4V2lkdGgiOiAwfSk7CgogICAgICAgIAogICAgICAgICAgICB2YXIgdmVnYV9mOThkNmQ0MDZiYWQ0YTRhOWNkZTkxZGUwY2YxMmZiYSA9ICQoYCAgICAgICAgICAgICA8ZGl2IGlkPSJ2ZWdhX2Y5OGQ2ZDQwNmJhZDRhNGE5Y2RlOTFkZTBjZjEyZmJhIj48L2Rpdj4gICAgICAgICAgICAgYClbMF07CiAgICAgICAgICAgIHBvcHVwX2I3OWYyMTQ1ZTI0NjQ5NzViMDg3ZGQwMjQwMTAxZGIxLnNldENvbnRlbnQodmVnYV9mOThkNmQ0MDZiYWQ0YTRhOWNkZTkxZGUwY2YxMmZiYSk7CiAgICAgICAgCgogICAgICAgIG1hcmtlcl9iYmQzYWMyYWVkZjY0ZGEzYmUyMjhiNTMwYWU5OGFiNC5iaW5kUG9wdXAocG9wdXBfYjc5ZjIxNDVlMjQ2NDk3NWIwODdkZDAyNDAxMDFkYjEpCiAgICAgICAgOwoKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIHZlZ2FfcGFyc2UoeyJheGVzIjogW3sic2NhbGUiOiAieCIsICJ0eXBlIjogIngifSwgeyJzY2FsZSI6ICJ5IiwgInR5cGUiOiAieSJ9XSwgImRhdGEiOiBbeyJuYW1lIjogInRhYmxlIiwgInZhbHVlcyI6IFt7ImNvbCI6ICJ5IiwgImlkeCI6IDAuNjQ0Mjg5MDc1NDY3NDc5MywgInZhbCI6IDAuNDYzMjg4NDQwNjgxNjY1OTd9LCB7ImNvbCI6ICJ5IiwgImlkeCI6IDAuMzEyMzY3MjAyOTUzNDAyNiwgInZhbCI6IDAuMTc4Mjk3NjA5NDkyMDk1NX0sIHsiY29sIjogInkiLCAiaWR4IjogMC42NTkwMDgwODkxMTI0NjAyLCAidmFsIjogMC45NTI3MDQzNzI4MTk0NjI2fSwgeyJjb2wiOiAieSIsICJpZHgiOiAwLjI5MjI2NDM1NTI2MDczMDYsICJ2YWwiOiAwLjgxNjM0OTAyMzc4NDI4MTV9LCB7ImNvbCI6ICJ5IiwgImlkeCI6IDAuNTA1OTE1Njg0NzQxMjg1OCwgInZhbCI6IDAuOTA1NzY5MzkzODA0OTU5Mn0sIHsiY29sIjogInkiLCAiaWR4IjogMC41MjQwMDI5NzMwNDE0NDI3LCAidmFsIjogMC40MjY0OTQ1NDU3ODQ2Nzg4fSwgeyJjb2wiOiAieSIsICJpZHgiOiAwLjU5NDY5MDg2MzMyMzcxMDIsICJ2YWwiOiAwLjgyMjE4OTA3NjY0NjE5NzF9LCB7ImNvbCI6ICJ5IiwgImlkeCI6IDAuODcxNjQ0NTg3NjE2NjUzMywgInZhbCI6IDAuODk3NTU4NDUxMDY0ODM5Mn0sIHsiY29sIjogInkiLCAiaWR4IjogMC4zOTQwMTIxMzY1NTE1MTExLCAidmFsIjogMC42OTExNjA2NzQxODM3MTg1fSwgeyJjb2wiOiAieSIsICJpZHgiOiAwLjM4NzE3ODY3NjE4NjgzODQzLCAidmFsIjogMC4yNjUwODg0MTAwMjI2NzczNn0sIHsiY29sIjogInkiLCAiaWR4IjogMC43NDg1MTM3MDY5MTcyMDc4LCAidmFsIjogMC4zNDg5MTI2NzQ5MzExNjAzfSwgeyJjb2wiOiAieSIsICJpZHgiOiAwLjE0NzM3OTYzMzcxNTExODQyLCAidmFsIjogMC4xMjU5NTAwODgzOTY2MDY2fSwgeyJjb2wiOiAieSIsICJpZHgiOiAwLjA2MzI1MTM2MDE1NzQzODcxLCAidmFsIjogMC4wNTQ4Mzg0NjU2ODIwOTA3Mn0sIHsiY29sIjogInkiLCAiaWR4IjogMC4wNDcyMzAwNTkwNDE2NTEwMSwgInZhbCI6IDAuNjUwMjU5NTQ3NTk0NDM4NH0sIHsiY29sIjogInkiLCAiaWR4IjogMC4yOTg4NDU0NTM5OTU0NDk3LCAidmFsIjogMC41OTUxMzE4NTE1NzY2OTV9LCB7ImNvbCI6ICJ5IiwgImlkeCI6IDAuMzM5ODAwNDg3OTU2NjE3MSwgInZhbCI6IDAuMjk5MjM1NzQ1MDI0OTAzMzV9LCB7ImNvbCI6ICJ5IiwgImlkeCI6IDAuNjQyODE2MTMxMTQzMjA2LCAidmFsIjogMC44MTkxODYzNjExNzUwNjA4fSwgeyJjb2wiOiAieSIsICJpZHgiOiAwLjYwODExNTA1MTMyNzU1ODksICJ2YWwiOiAwLjk0MTE1NjAzOTEyMTc5OX0sIHsiY29sIjogInkiLCAiaWR4IjogMC40MTA1OTc4MDQwMDAwOTUyNywgInZhbCI6IDAuODk0ODM1MTIyODIwOTI0NH0sIHsiY29sIjogInkiLCAiaWR4IjogMC4xMzM4NzI0NjUyODUzNzkyMiwgInZhbCI6IDAuMDc4NDcwMjY0NTU2OTE0OTd9LCB7ImNvbCI6ICJ5IiwgImlkeCI6IDAuMzY3MjIzMzUyNjM0NTQ4NjQsICJ2YWwiOiAwLjQ2Nzc3ODU5MTY1NDM0MTU1fSwgeyJjb2wiOiAieSIsICJpZHgiOiAwLjEzNjkyMDQ5NjU5MjM1NjA2LCAidmFsIjogMC4zMjkzODg4NzI0ODMzMTIzfSwgeyJjb2wiOiAieSIsICJpZHgiOiAwLjMxMDE4OTA2Mzc5NDI3MDcsICJ2YWwiOiAwLjgzMDU4MDc1MzI5MTU4NTZ9LCB7ImNvbCI6ICJ5IiwgImlkeCI6IDAuNzgzOTY3MjAwODkxMjAxNSwgInZhbCI6IDAuNDY5MTc2NTY0NzUyMTIyMn0sIHsiY29sIjogInkiLCAiaWR4IjogMC41MTM2Nzc0NDI2MDk5MTQsICJ2YWwiOiAwLjgwNjMzOTE3MDAyODQzMjl9LCB7ImNvbCI6ICJ5IiwgImlkeCI6IDAuNjQ2MTgwMzU4MDUwNzI5NCwgInZhbCI6IDAuMjIwNjcwMjkzNzY1MTUxMDJ9LCB7ImNvbCI6ICJ5IiwgImlkeCI6IDAuNzM0MDk2MzkwODA3NzUyNywgInZhbCI6IDAuMDE2OTI5MjE0NTAyNDU2OTl9LCB7ImNvbCI6ICJ5IiwgImlkeCI6IDAuOTU3ODYxMzkxNTgxMDU4MiwgInZhbCI6IDAuNDE5MjI2NzUyMjE4MTkzOTR9LCB7ImNvbCI6ICJ5IiwgImlkeCI6IDAuNjE2OTMwODQ5MjgxMzYxNSwgInZhbCI6IDAuNjY0NDg3Njk5ODQ4MDkyNH0sIHsiY29sIjogInkiLCAiaWR4IjogMC42MTA3MzM3MDA4Nzk1Njk5LCAidmFsIjogMC4zMzA3MTA1Mjk2MDQ5NDc4NH0sIHsiY29sIjogInkiLCAiaWR4IjogMC4zNzI2OTkzMTE1Njg4NzMyNiwgInZhbCI6IDAuMzg2OTA5MDEzMzUxODM0MDN9LCB7ImNvbCI6ICJ5IiwgImlkeCI6IDAuNDMwMjAxMTg0NDc0Njg3MjUsICJ2YWwiOiAwLjkwMjkwMzA4NDUzMjcwNDN9LCB7ImNvbCI6ICJ5IiwgImlkeCI6IDAuOTMyMzA0ODg0MjQ5ODE3MywgInZhbCI6IDAuNTYxNzc1MzI5MTkzNTIzOH0sIHsiY29sIjogInkiLCAiaWR4IjogMC43Mzg4MTEzNDQ4NDQzODU0LCAidmFsIjogMC43MjU1Njc4MjU3MDc0ODM4fSwgeyJjb2wiOiAieSIsICJpZHgiOiAwLjM2NDg3NDE3OTQ1MDU3NiwgInZhbCI6IDAuNjM4NDkxMzk4ODQyMzQ2N30sIHsiY29sIjogInkiLCAiaWR4IjogMC4zODM1NjgzOTYxNDk5MTkxLCAidmFsIjogMC44Mjc2Njk5MjQ4NDgyNDMzfSwgeyJjb2wiOiAieSIsICJpZHgiOiAwLjc1Nzg3Nzc5NzIwMTk4NjYsICJ2YWwiOiAwLjE0MTA1Nzk5NDA5MTIzMjF9LCB7ImNvbCI6ICJ5IiwgImlkeCI6IDAuMDE4OTU4NzExOTk5NDA4OTA2LCAidmFsIjogMC44MTA1MTUxMTYyMDI3ODV9LCB7ImNvbCI6ICJ5IiwgImlkeCI6IDAuNjQ5MDMxNTc2MTQwNTM1NSwgInZhbCI6IDAuMzE0ODg3OTE3MzQ0NTgzNTV9LCB7ImNvbCI6ICJ5IiwgImlkeCI6IDAuMzk2MDQ5NjM2ODM3OTQ3MzYsICJ2YWwiOiAwLjg5MzAzMzIwOTc1ODk5Njd9LCB7ImNvbCI6ICJ5IiwgImlkeCI6IDAuMzY1NjgwOTEzODM0MTU0NiwgInZhbCI6IDAuNzQyMTk3Njc2OTg2MzA5MX0sIHsiY29sIjogInkiLCAiaWR4IjogMC4yNjczMDYyNzA5NzI0NDE0LCAidmFsIjogMC4yMTgyMjg0OTg4MjkyOTI0fSwgeyJjb2wiOiAieSIsICJpZHgiOiAwLjM1OTc5ODU1MzY3MzkyMDgsICJ2YWwiOiAwLjA4Nzg1MTI0Njg3MDI4MDQ1fSwgeyJjb2wiOiAieSIsICJpZHgiOiAwLjAzNzQxNTQxNTY0Mjk4MDAxLCAidmFsIjogMC4wNTAwMTU0OTc2Nzg2MDU4fSwgeyJjb2wiOiAieSIsICJpZHgiOiAwLjEyMTM2Mzk4ODE2NzM5MjM2LCAidmFsIjogMC4wNzE1OTM4MjU1NTY4Njg0NH0sIHsiY29sIjogInkiLCAiaWR4IjogMC4xNTAyMDI2MDIwNjA2OTkzNSwgInZhbCI6IDAuNjkxNDU0NDI2MjAxNDAzN30sIHsiY29sIjogInkiLCAiaWR4IjogMC44OTE3OTUwMjI2NjIyNzQyLCAidmFsIjogMC45MDQwODkwNjM5ODcwMjA1fSwgeyJjb2wiOiAieSIsICJpZHgiOiAwLjE2ODAwMDQzODQyNjg5MjYsICJ2YWwiOiAwLjg0ODU2MTY0MzYyODAxMjN9LCB7ImNvbCI6ICJ5IiwgImlkeCI6IDAuNjUxMDcwMjg0NTE4ODEyMywgInZhbCI6IDAuNzgxMDU4MzczNDkxMDA4Mn0sIHsiY29sIjogInkiLCAiaWR4IjogMC4yMTEyNDQ1MjA5Njg5ODIwNSwgInZhbCI6IDAuMTE0MjYxNjc4NTQ2ODIwMzR9LCB7ImNvbCI6ICJ5IiwgImlkeCI6IDAuMDA0NDQzNTI1NTQ0MDgxNjcyLCAidmFsIjogMC44MjMwMDQwODAxMDc5NzIzfSwgeyJjb2wiOiAieSIsICJpZHgiOiAwLjI2OTM4NDk4MzI1NDY3MSwgInZhbCI6IDAuNzI3NjY2NTM3Mjg4MjE4fSwgeyJjb2wiOiAieSIsICJpZHgiOiAwLjMxNzUyOTExMTAzNjA1NTUsICJ2YWwiOiAwLjEyOTA0ODUyNTkzOTIwMzU3fSwgeyJjb2wiOiAieSIsICJpZHgiOiAwLjk5NzYzMDU1Mjg1ODc2MTgsICJ2YWwiOiAwLjYxMDA5NjkxNTk2ODI5MX0sIHsiY29sIjogInkiLCAiaWR4IjogMC42NzQxNDEzNjc5NzYxNTY2LCAidmFsIjogMC4xNTAwNzIyMjU5MjQwMzkyNH0sIHsiY29sIjogInkiLCAiaWR4IjogMC4xNjg2NDE1NDY5MzAyMDQ4MywgInZhbCI6IDAuMjU4OTM0OTIwOTk1MDEyN30sIHsiY29sIjogInkiLCAiaWR4IjogMC43NDI0NjgyOTU3NTY1OTM2LCAidmFsIjogMC43MjA0NjAwNzkyMzI0NDM1fSwgeyJjb2wiOiAieSIsICJpZHgiOiAwLjY4ODYxMjc2NDg0OTMwNjcsICJ2YWwiOiAwLjA3OTI5NTk4MzQ1MTgyNjA5fSwgeyJjb2wiOiAieSIsICJpZHgiOiAwLjM2NjU0ODc5NjY4NTYzMDcsICJ2YWwiOiAwLjQ4MTQwNjA2ODQ0NzE2NDE2fSwgeyJjb2wiOiAieSIsICJpZHgiOiAwLjg1NTUyMDMyMzY3OTk2NjksICJ2YWwiOiAwLjA2NDMyNzE2ODM1MDc5MjMzfSwgeyJjb2wiOiAieSIsICJpZHgiOiAwLjIzMzIyOTE1NTIwMjkwNSwgInZhbCI6IDAuNTU0MTEyMDgxNzQ1NDg2N30sIHsiY29sIjogInkiLCAiaWR4IjogMC4xMDI0NzUxODkxMzIwMzI1NywgInZhbCI6IDAuMzg2ODM0NDY0NTQyNzQzOTV9LCB7ImNvbCI6ICJ5IiwgImlkeCI6IDAuNzcyMzA2NTQ2MjkyMTg4MiwgInZhbCI6IDAuNDIwMTcwODI2MTgwMjkwNDV9LCB7ImNvbCI6ICJ5IiwgImlkeCI6IDAuMDE2NDQ1OTQ1NDAxNzc5MTI3LCAidmFsIjogMC44OTU1Mjk5MTExNDEyNDd9LCB7ImNvbCI6ICJ5IiwgImlkeCI6IDAuNTI5Nzk4NzQyMzk1NTQzMSwgInZhbCI6IDAuNDQxMDMxOTMwNDg5NjE5NzV9LCB7ImNvbCI6ICJ5IiwgImlkeCI6IDAuMDc5NTM2MjIzNjc1ODc1ODcsICJ2YWwiOiAwLjAzODk0Mzk3ODQyMzU4Njg4fSwgeyJjb2wiOiAieSIsICJpZHgiOiAwLjUzMTQ4MzIxMTQ2MzIzMDIsICJ2YWwiOiAwLjcyNDE4NDk4MDkwNTc1ODl9LCB7ImNvbCI6ICJ5IiwgImlkeCI6IDAuOTE4NTA5MDg2MDYwMzI2MywgInZhbCI6IDAuMjM1MzUzMDc3MTYyMDY0MjJ9LCB7ImNvbCI6ICJ5IiwgImlkeCI6IDAuNzQxNTEzMjA4NjgxOTc2MiwgInZhbCI6IDAuNzI1ODY3NDM1MzQ0NTI4fSwgeyJjb2wiOiAieSIsICJpZHgiOiAwLjg3NzUzOTU0MTg4OTkyMDIsICJ2YWwiOiAwLjE2Mjg3MzAwODU1MDg4ODZ9LCB7ImNvbCI6ICJ5IiwgImlkeCI6IDAuNjM4MTIxOTg4NzEwMjgzNywgInZhbCI6IDAuNDg4NjA1MjUyMDgxMTc5NDR9LCB7ImNvbCI6ICJ5IiwgImlkeCI6IDAuNTgwOTQzNjI4MjIxMTA1MSwgInZhbCI6IDAuMzYxOTc2NTExNjc5NDUzNDR9LCB7ImNvbCI6ICJ5IiwgImlkeCI6IDAuMjY1MDQ1MTEwMTk3NzY5NjYsICJ2YWwiOiAwLjY3MzEzNjQwNTAwMzQ4NTl9LCB7ImNvbCI6ICJ5IiwgImlkeCI6IDAuODkwODgzNTc2ODUyOTc0NywgInZhbCI6IDAuMzA2MjE1NTMyNDMxNTg0M30sIHsiY29sIjogInkiLCAiaWR4IjogMC4yNDQ2MjMzOTQxNDMwODQ3NiwgInZhbCI6IDAuMzgzNDg4NzYzMDYzOTg1Mjd9LCB7ImNvbCI6ICJ5IiwgImlkeCI6IDAuNjkxMzI2MjU3NDc4MzczNCwgInZhbCI6IDAuMDk0OTM2MjYyNjgxODkzMTV9LCB7ImNvbCI6ICJ5IiwgImlkeCI6IDAuMzI5NzIxOTkwMjIwNTk5NjcsICJ2YWwiOiAwLjQwNTMzNDkwMDQzNTE1NDV9LCB7ImNvbCI6ICJ5IiwgImlkeCI6IDAuNzEwNjMxODc1NTI0OTMsICJ2YWwiOiAwLjE0ODU3NTY3NTU1NjcwMDI2fSwgeyJjb2wiOiAieSIsICJpZHgiOiAwLjU2ODk4ODAzMDU1NTIxOTMsICJ2YWwiOiAwLjc3MDgwNzY3NTk1NTY0OTh9LCB7ImNvbCI6ICJ5IiwgImlkeCI6IDAuNzc2MzU5NjQ4ODYwMTUyNywgInZhbCI6IDAuNzAwMzQwNzU5MzUxNTMzMX0sIHsiY29sIjogInkiLCAiaWR4IjogMC4yNTA4NDI0NjgwMDg1NTg5LCAidmFsIjogMC4yNjEzNjk4NzUwNTAwODF9LCB7ImNvbCI6ICJ5IiwgImlkeCI6IDAuOTk5NjQ3NDExNjgyNDc0NiwgInZhbCI6IDAuNTIxODc3NDYzOTQzNTczM30sIHsiY29sIjogInkiLCAiaWR4IjogMC42NjQzNTc2Nzc0NTQxMDY5LCAidmFsIjogMC44ODMyMzE1NDE4NDEwNDQxfSwgeyJjb2wiOiAieSIsICJpZHgiOiAwLjkyOTY3OTc3MTE0ODU5NDgsICJ2YWwiOiAwLjUzMjQzMDA2MjUzMTU0NDV9LCB7ImNvbCI6ICJ5IiwgImlkeCI6IDAuMjQ2NDk0MTcyNzg5NDU4MywgInZhbCI6IDAuMTkwOTIyNzM3OTY1NDkxNTN9LCB7ImNvbCI6ICJ5IiwgImlkeCI6IDAuOTA2MjkxMDU2Mjk4Mzc5OCwgInZhbCI6IDAuNTMzMzczMTA2MzEzMjU5Mn0sIHsiY29sIjogInkiLCAiaWR4IjogMC45MTc3NDE4MTQyMjgyNDQ3LCAidmFsIjogMC45NzI2NzU5NjgwNDc4MTg4fSwgeyJjb2wiOiAieSIsICJpZHgiOiAwLjI2NTk3MDg5NDY2NjA1MzcsICJ2YWwiOiAwLjM3MTA5NzgxNDY4OTk3ODd9LCB7ImNvbCI6ICJ5IiwgImlkeCI6IDAuNTA1MDQxODE5MjU4ODExOCwgInZhbCI6IDAuMzEzMzEzMTYyNTEyNjA5OX0sIHsiY29sIjogInkiLCAiaWR4IjogMC41MzExOTMyMzI2MDExNjQxLCAidmFsIjogMC4zMjU1MDUwNTU2ODA1ODAzfSwgeyJjb2wiOiAieSIsICJpZHgiOiAwLjc1MjI4Mjc1NzU0ODIyMTYsICJ2YWwiOiAwLjg5OTY2NjU1NzA1NzAzOTh9LCB7ImNvbCI6ICJ5IiwgImlkeCI6IDAuMTY3OTk2MDY4Nzc2MjY4MTYsICJ2YWwiOiAwLjgxNDIyMjQ1Mzc2NzQ2NjJ9LCB7ImNvbCI6ICJ5IiwgImlkeCI6IDAuMjQ2NTEyMzY3NzQzMjY0MjQsICJ2YWwiOiAwLjgzMDYzOTk4MTE1NjM5MjV9LCB7ImNvbCI6ICJ5IiwgImlkeCI6IDAuNjA1OTU5NzI5MzYzNjM3NCwgInZhbCI6IDAuMTk0MTY1NjQ3MTYxNTY0N30sIHsiY29sIjogInkiLCAiaWR4IjogMC40NzEyMjk0ODE0NDk5NTE0NywgInZhbCI6IDAuMTA0NTkyODk0MTQyOTYwOH0sIHsiY29sIjogInkiLCAiaWR4IjogMC45ODMzMTA1Njc3NzM3NDE0LCAidmFsIjogMC40MTY5MzIxNzQyOTI2Mjk1fSwgeyJjb2wiOiAieSIsICJpZHgiOiAwLjA2NDEwNzY3OTE4MDUzMDE3LCAidmFsIjogMC42ODA4NjcyOTYwMDYyNTE0fSwgeyJjb2wiOiAieSIsICJpZHgiOiAwLjg2NjQ3NjMzMTAyNDYyNDYsICJ2YWwiOiAwLjIwODQ0Mzg5Njg4Nzk2MjA1fSwgeyJjb2wiOiAieSIsICJpZHgiOiAwLjk3MDUwMDE3ODM0NTAzMzgsICJ2YWwiOiAwLjYwOTUzNjExNzEwMzYyOTl9LCB7ImNvbCI6ICJ5IiwgImlkeCI6IDAuOTA2NzIwNDU2OTMzNDMxOCwgInZhbCI6IDAuMDYzMDU2ODE2Mzg2MjQ5MTZ9XX1dLCAiaGVpZ2h0IjogMzAwLCAibGVnZW5kcyI6IFtdLCAibWFya3MiOiBbeyJmcm9tIjogeyJkYXRhIjogInRhYmxlIiwgInRyYW5zZm9ybSI6IFt7ImtleXMiOiBbImRhdGEuY29sIl0sICJ0eXBlIjogImZhY2V0In1dfSwgIm1hcmtzIjogW3sicHJvcGVydGllcyI6IHsiZW50ZXIiOiB7ImZpbGwiOiB7ImZpZWxkIjogImRhdGEuY29sIiwgInNjYWxlIjogImNvbG9yIn0sICJzaXplIjogeyJ2YWx1ZSI6IDEwMH0sICJ4IjogeyJmaWVsZCI6ICJkYXRhLmlkeCIsICJzY2FsZSI6ICJ4In0sICJ5IjogeyJmaWVsZCI6ICJkYXRhLnZhbCIsICJzY2FsZSI6ICJ5In19fSwgInR5cGUiOiAic3ltYm9sIn1dLCAidHlwZSI6ICJncm91cCJ9XSwgInBhZGRpbmciOiAiYXV0byIsICJzY2FsZXMiOiBbeyJkb21haW4iOiB7ImRhdGEiOiAidGFibGUiLCAiZmllbGQiOiAiZGF0YS5pZHgifSwgIm5hbWUiOiAieCIsICJyYW5nZSI6ICJ3aWR0aCIsICJ0eXBlIjogImxpbmVhciJ9LCB7ImRvbWFpbiI6IHsiZGF0YSI6ICJ0YWJsZSIsICJmaWVsZCI6ICJkYXRhLnZhbCJ9LCAibmFtZSI6ICJ5IiwgIm5pY2UiOiB0cnVlLCAicmFuZ2UiOiAiaGVpZ2h0In0sIHsiZG9tYWluIjogeyJkYXRhIjogInRhYmxlIiwgImZpZWxkIjogImRhdGEuY29sIn0sICJuYW1lIjogImNvbG9yIiwgInJhbmdlIjogImNhdGVnb3J5MjAiLCAidHlwZSI6ICJvcmRpbmFsIn1dLCAid2lkdGgiOiA2MDB9LHZlZ2FfZjk4ZDZkNDA2YmFkNGE0YTljZGU5MWRlMGNmMTJmYmEpOwogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgCiAgICAgICAgICAgIHZhciBtYXJrZXJfMTQyMTQ2YmQ2ZDI3NDExNjgyNTM1ZWQ3NTk5NWMwMmYgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFszMC4wLCAtODAuMF0sCiAgICAgICAgICAgICAgICB7fQogICAgICAgICAgICApLmFkZFRvKG1hcF81MTE3YjcyMGM3ZTQ0N2Y4YjBlZTMyYjg2ZjU4ODAzYSk7CiAgICAgICAgCiAgICAKICAgICAgICB2YXIgcG9wdXBfMjBhNzY5M2ZiYmNkNDVkMTg4ZThiNDM4M2Q3ZTg4OGMgPSBMLnBvcHVwKHsibWF4V2lkdGgiOiA2NTB9KTsKCiAgICAgICAgCiAgICAgICAgICAgIHZhciB2ZWdhX2YxZmRkNzVmM2EzNzQxNDQ5MWMwNTk3YjdhNjg5Y2VjID0gJChgICAgICAgICAgICAgIDxkaXYgaWQ9InZlZ2FfZjFmZGQ3NWYzYTM3NDE0NDkxYzA1OTdiN2E2ODljZWMiPjwvZGl2PiAgICAgICAgICAgICBgKVswXTsKICAgICAgICAgICAgcG9wdXBfMjBhNzY5M2ZiYmNkNDVkMTg4ZThiNDM4M2Q3ZTg4OGMuc2V0Q29udGVudCh2ZWdhX2YxZmRkNzVmM2EzNzQxNDQ5MWMwNTk3YjdhNjg5Y2VjKTsKICAgICAgICAKCiAgICAgICAgbWFya2VyXzE0MjE0NmJkNmQyNzQxMTY4MjUzNWVkNzU5OTVjMDJmLmJpbmRQb3B1cChwb3B1cF8yMGE3NjkzZmJiY2Q0NWQxODhlOGI0MzgzZDdlODg4YykKICAgICAgICA7CgogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgdmVnYV9wYXJzZSh7ImF4ZXMiOiBbeyJzY2FsZSI6ICJ4IiwgInR5cGUiOiAieCJ9LCB7InNjYWxlIjogInkiLCAidHlwZSI6ICJ5In1dLCAiZGF0YSI6IFt7Im5hbWUiOiAidGFibGUiLCAidmFsdWVzIjogW3siY29sIjogInkiLCAiaWR4IjogMC42NDQyODkwNzU0Njc0NzkzLCAidmFsIjogMC40NjMyODg0NDA2ODE2NjU5N30sIHsiY29sIjogInkiLCAiaWR4IjogMC4zMTIzNjcyMDI5NTM0MDI2LCAidmFsIjogMC4xNzgyOTc2MDk0OTIwOTU1fSwgeyJjb2wiOiAieSIsICJpZHgiOiAwLjY1OTAwODA4OTExMjQ2MDIsICJ2YWwiOiAwLjk1MjcwNDM3MjgxOTQ2MjZ9LCB7ImNvbCI6ICJ5IiwgImlkeCI6IDAuMjkyMjY0MzU1MjYwNzMwNiwgInZhbCI6IDAuODE2MzQ5MDIzNzg0MjgxNX0sIHsiY29sIjogInkiLCAiaWR4IjogMC41MDU5MTU2ODQ3NDEyODU4LCAidmFsIjogMC45MDU3NjkzOTM4MDQ5NTkyfSwgeyJjb2wiOiAieSIsICJpZHgiOiAwLjUyNDAwMjk3MzA0MTQ0MjcsICJ2YWwiOiAwLjQyNjQ5NDU0NTc4NDY3ODh9LCB7ImNvbCI6ICJ5IiwgImlkeCI6IDAuNTk0NjkwODYzMzIzNzEwMiwgInZhbCI6IDAuODIyMTg5MDc2NjQ2MTk3MX0sIHsiY29sIjogInkiLCAiaWR4IjogMC44NzE2NDQ1ODc2MTY2NTMzLCAidmFsIjogMC44OTc1NTg0NTEwNjQ4MzkyfSwgeyJjb2wiOiAieSIsICJpZHgiOiAwLjM5NDAxMjEzNjU1MTUxMTEsICJ2YWwiOiAwLjY5MTE2MDY3NDE4MzcxODV9LCB7ImNvbCI6ICJ5IiwgImlkeCI6IDAuMzg3MTc4Njc2MTg2ODM4NDMsICJ2YWwiOiAwLjI2NTA4ODQxMDAyMjY3NzM2fSwgeyJjb2wiOiAieSIsICJpZHgiOiAwLjc0ODUxMzcwNjkxNzIwNzgsICJ2YWwiOiAwLjM0ODkxMjY3NDkzMTE2MDN9LCB7ImNvbCI6ICJ5IiwgImlkeCI6IDAuMTQ3Mzc5NjMzNzE1MTE4NDIsICJ2YWwiOiAwLjEyNTk1MDA4ODM5NjYwNjZ9LCB7ImNvbCI6ICJ5IiwgImlkeCI6IDAuMDYzMjUxMzYwMTU3NDM4NzEsICJ2YWwiOiAwLjA1NDgzODQ2NTY4MjA5MDcyfSwgeyJjb2wiOiAieSIsICJpZHgiOiAwLjA0NzIzMDA1OTA0MTY1MTAxLCAidmFsIjogMC42NTAyNTk1NDc1OTQ0Mzg0fSwgeyJjb2wiOiAieSIsICJpZHgiOiAwLjI5ODg0NTQ1Mzk5NTQ0OTcsICJ2YWwiOiAwLjU5NTEzMTg1MTU3NjY5NX0sIHsiY29sIjogInkiLCAiaWR4IjogMC4zMzk4MDA0ODc5NTY2MTcxLCAidmFsIjogMC4yOTkyMzU3NDUwMjQ5MDMzNX0sIHsiY29sIjogInkiLCAiaWR4IjogMC42NDI4MTYxMzExNDMyMDYsICJ2YWwiOiAwLjgxOTE4NjM2MTE3NTA2MDh9LCB7ImNvbCI6ICJ5IiwgImlkeCI6IDAuNjA4MTE1MDUxMzI3NTU4OSwgInZhbCI6IDAuOTQxMTU2MDM5MTIxNzk5fSwgeyJjb2wiOiAieSIsICJpZHgiOiAwLjQxMDU5NzgwNDAwMDA5NTI3LCAidmFsIjogMC44OTQ4MzUxMjI4MjA5MjQ0fSwgeyJjb2wiOiAieSIsICJpZHgiOiAwLjEzMzg3MjQ2NTI4NTM3OTIyLCAidmFsIjogMC4wNzg0NzAyNjQ1NTY5MTQ5N30sIHsiY29sIjogInkiLCAiaWR4IjogMC4zNjcyMjMzNTI2MzQ1NDg2NCwgInZhbCI6IDAuNDY3Nzc4NTkxNjU0MzQxNTV9LCB7ImNvbCI6ICJ5IiwgImlkeCI6IDAuMTM2OTIwNDk2NTkyMzU2MDYsICJ2YWwiOiAwLjMyOTM4ODg3MjQ4MzMxMjN9LCB7ImNvbCI6ICJ5IiwgImlkeCI6IDAuMzEwMTg5MDYzNzk0MjcwNywgInZhbCI6IDAuODMwNTgwNzUzMjkxNTg1Nn0sIHsiY29sIjogInkiLCAiaWR4IjogMC43ODM5NjcyMDA4OTEyMDE1LCAidmFsIjogMC40NjkxNzY1NjQ3NTIxMjIyfSwgeyJjb2wiOiAieSIsICJpZHgiOiAwLjUxMzY3NzQ0MjYwOTkxNCwgInZhbCI6IDAuODA2MzM5MTcwMDI4NDMyOX0sIHsiY29sIjogInkiLCAiaWR4IjogMC42NDYxODAzNTgwNTA3Mjk0LCAidmFsIjogMC4yMjA2NzAyOTM3NjUxNTEwMn0sIHsiY29sIjogInkiLCAiaWR4IjogMC43MzQwOTYzOTA4MDc3NTI3LCAidmFsIjogMC4wMTY5MjkyMTQ1MDI0NTY5OX0sIHsiY29sIjogInkiLCAiaWR4IjogMC45NTc4NjEzOTE1ODEwNTgyLCAidmFsIjogMC40MTkyMjY3NTIyMTgxOTM5NH0sIHsiY29sIjogInkiLCAiaWR4IjogMC42MTY5MzA4NDkyODEzNjE1LCAidmFsIjogMC42NjQ0ODc2OTk4NDgwOTI0fSwgeyJjb2wiOiAieSIsICJpZHgiOiAwLjYxMDczMzcwMDg3OTU2OTksICJ2YWwiOiAwLjMzMDcxMDUyOTYwNDk0Nzg0fSwgeyJjb2wiOiAieSIsICJpZHgiOiAwLjM3MjY5OTMxMTU2ODg3MzI2LCAidmFsIjogMC4zODY5MDkwMTMzNTE4MzQwM30sIHsiY29sIjogInkiLCAiaWR4IjogMC40MzAyMDExODQ0NzQ2ODcyNSwgInZhbCI6IDAuOTAyOTAzMDg0NTMyNzA0M30sIHsiY29sIjogInkiLCAiaWR4IjogMC45MzIzMDQ4ODQyNDk4MTczLCAidmFsIjogMC41NjE3NzUzMjkxOTM1MjM4fSwgeyJjb2wiOiAieSIsICJpZHgiOiAwLjczODgxMTM0NDg0NDM4NTQsICJ2YWwiOiAwLjcyNTU2NzgyNTcwNzQ4Mzh9LCB7ImNvbCI6ICJ5IiwgImlkeCI6IDAuMzY0ODc0MTc5NDUwNTc2LCAidmFsIjogMC42Mzg0OTEzOTg4NDIzNDY3fSwgeyJjb2wiOiAieSIsICJpZHgiOiAwLjM4MzU2ODM5NjE0OTkxOTEsICJ2YWwiOiAwLjgyNzY2OTkyNDg0ODI0MzN9LCB7ImNvbCI6ICJ5IiwgImlkeCI6IDAuNzU3ODc3Nzk3MjAxOTg2NiwgInZhbCI6IDAuMTQxMDU3OTk0MDkxMjMyMX0sIHsiY29sIjogInkiLCAiaWR4IjogMC4wMTg5NTg3MTE5OTk0MDg5MDYsICJ2YWwiOiAwLjgxMDUxNTExNjIwMjc4NX0sIHsiY29sIjogInkiLCAiaWR4IjogMC42NDkwMzE1NzYxNDA1MzU1LCAidmFsIjogMC4zMTQ4ODc5MTczNDQ1ODM1NX0sIHsiY29sIjogInkiLCAiaWR4IjogMC4zOTYwNDk2MzY4Mzc5NDczNiwgInZhbCI6IDAuODkzMDMzMjA5NzU4OTk2N30sIHsiY29sIjogInkiLCAiaWR4IjogMC4zNjU2ODA5MTM4MzQxNTQ2LCAidmFsIjogMC43NDIxOTc2NzY5ODYzMDkxfSwgeyJjb2wiOiAieSIsICJpZHgiOiAwLjI2NzMwNjI3MDk3MjQ0MTQsICJ2YWwiOiAwLjIxODIyODQ5ODgyOTI5MjR9LCB7ImNvbCI6ICJ5IiwgImlkeCI6IDAuMzU5Nzk4NTUzNjczOTIwOCwgInZhbCI6IDAuMDg3ODUxMjQ2ODcwMjgwNDV9LCB7ImNvbCI6ICJ5IiwgImlkeCI6IDAuMDM3NDE1NDE1NjQyOTgwMDEsICJ2YWwiOiAwLjA1MDAxNTQ5NzY3ODYwNTh9LCB7ImNvbCI6ICJ5IiwgImlkeCI6IDAuMTIxMzYzOTg4MTY3MzkyMzYsICJ2YWwiOiAwLjA3MTU5MzgyNTU1Njg2ODQ0fSwgeyJjb2wiOiAieSIsICJpZHgiOiAwLjE1MDIwMjYwMjA2MDY5OTM1LCAidmFsIjogMC42OTE0NTQ0MjYyMDE0MDM3fSwgeyJjb2wiOiAieSIsICJpZHgiOiAwLjg5MTc5NTAyMjY2MjI3NDIsICJ2YWwiOiAwLjkwNDA4OTA2Mzk4NzAyMDV9LCB7ImNvbCI6ICJ5IiwgImlkeCI6IDAuMTY4MDAwNDM4NDI2ODkyNiwgInZhbCI6IDAuODQ4NTYxNjQzNjI4MDEyM30sIHsiY29sIjogInkiLCAiaWR4IjogMC42NTEwNzAyODQ1MTg4MTIzLCAidmFsIjogMC43ODEwNTgzNzM0OTEwMDgyfSwgeyJjb2wiOiAieSIsICJpZHgiOiAwLjIxMTI0NDUyMDk2ODk4MjA1LCAidmFsIjogMC4xMTQyNjE2Nzg1NDY4MjAzNH0sIHsiY29sIjogInkiLCAiaWR4IjogMC4wMDQ0NDM1MjU1NDQwODE2NzIsICJ2YWwiOiAwLjgyMzAwNDA4MDEwNzk3MjN9LCB7ImNvbCI6ICJ5IiwgImlkeCI6IDAuMjY5Mzg0OTgzMjU0NjcxLCAidmFsIjogMC43Mjc2NjY1MzcyODgyMTh9LCB7ImNvbCI6ICJ5IiwgImlkeCI6IDAuMzE3NTI5MTExMDM2MDU1NSwgInZhbCI6IDAuMTI5MDQ4NTI1OTM5MjAzNTd9LCB7ImNvbCI6ICJ5IiwgImlkeCI6IDAuOTk3NjMwNTUyODU4NzYxOCwgInZhbCI6IDAuNjEwMDk2OTE1OTY4MjkxfSwgeyJjb2wiOiAieSIsICJpZHgiOiAwLjY3NDE0MTM2Nzk3NjE1NjYsICJ2YWwiOiAwLjE1MDA3MjIyNTkyNDAzOTI0fSwgeyJjb2wiOiAieSIsICJpZHgiOiAwLjE2ODY0MTU0NjkzMDIwNDgzLCAidmFsIjogMC4yNTg5MzQ5MjA5OTUwMTI3fSwgeyJjb2wiOiAieSIsICJpZHgiOiAwLjc0MjQ2ODI5NTc1NjU5MzYsICJ2YWwiOiAwLjcyMDQ2MDA3OTIzMjQ0MzV9LCB7ImNvbCI6ICJ5IiwgImlkeCI6IDAuNjg4NjEyNzY0ODQ5MzA2NywgInZhbCI6IDAuMDc5Mjk1OTgzNDUxODI2MDl9LCB7ImNvbCI6ICJ5IiwgImlkeCI6IDAuMzY2NTQ4Nzk2Njg1NjMwNywgInZhbCI6IDAuNDgxNDA2MDY4NDQ3MTY0MTZ9LCB7ImNvbCI6ICJ5IiwgImlkeCI6IDAuODU1NTIwMzIzNjc5OTY2OSwgInZhbCI6IDAuMDY0MzI3MTY4MzUwNzkyMzN9LCB7ImNvbCI6ICJ5IiwgImlkeCI6IDAuMjMzMjI5MTU1MjAyOTA1LCAidmFsIjogMC41NTQxMTIwODE3NDU0ODY3fSwgeyJjb2wiOiAieSIsICJpZHgiOiAwLjEwMjQ3NTE4OTEzMjAzMjU3LCAidmFsIjogMC4zODY4MzQ0NjQ1NDI3NDM5NX0sIHsiY29sIjogInkiLCAiaWR4IjogMC43NzIzMDY1NDYyOTIxODgyLCAidmFsIjogMC40MjAxNzA4MjYxODAyOTA0NX0sIHsiY29sIjogInkiLCAiaWR4IjogMC4wMTY0NDU5NDU0MDE3NzkxMjcsICJ2YWwiOiAwLjg5NTUyOTkxMTE0MTI0N30sIHsiY29sIjogInkiLCAiaWR4IjogMC41Mjk3OTg3NDIzOTU1NDMxLCAidmFsIjogMC40NDEwMzE5MzA0ODk2MTk3NX0sIHsiY29sIjogInkiLCAiaWR4IjogMC4wNzk1MzYyMjM2NzU4NzU4NywgInZhbCI6IDAuMDM4OTQzOTc4NDIzNTg2ODh9LCB7ImNvbCI6ICJ5IiwgImlkeCI6IDAuNTMxNDgzMjExNDYzMjMwMiwgInZhbCI6IDAuNzI0MTg0OTgwOTA1NzU4OX0sIHsiY29sIjogInkiLCAiaWR4IjogMC45MTg1MDkwODYwNjAzMjYzLCAidmFsIjogMC4yMzUzNTMwNzcxNjIwNjQyMn0sIHsiY29sIjogInkiLCAiaWR4IjogMC43NDE1MTMyMDg2ODE5NzYyLCAidmFsIjogMC43MjU4Njc0MzUzNDQ1Mjh9LCB7ImNvbCI6ICJ5IiwgImlkeCI6IDAuODc3NTM5NTQxODg5OTIwMiwgInZhbCI6IDAuMTYyODczMDA4NTUwODg4Nn0sIHsiY29sIjogInkiLCAiaWR4IjogMC42MzgxMjE5ODg3MTAyODM3LCAidmFsIjogMC40ODg2MDUyNTIwODExNzk0NH0sIHsiY29sIjogInkiLCAiaWR4IjogMC41ODA5NDM2MjgyMjExMDUxLCAidmFsIjogMC4zNjE5NzY1MTE2Nzk0NTM0NH0sIHsiY29sIjogInkiLCAiaWR4IjogMC4yNjUwNDUxMTAxOTc3Njk2NiwgInZhbCI6IDAuNjczMTM2NDA1MDAzNDg1OX0sIHsiY29sIjogInkiLCAiaWR4IjogMC44OTA4ODM1NzY4NTI5NzQ3LCAidmFsIjogMC4zMDYyMTU1MzI0MzE1ODQzfSwgeyJjb2wiOiAieSIsICJpZHgiOiAwLjI0NDYyMzM5NDE0MzA4NDc2LCAidmFsIjogMC4zODM0ODg3NjMwNjM5ODUyN30sIHsiY29sIjogInkiLCAiaWR4IjogMC42OTEzMjYyNTc0NzgzNzM0LCAidmFsIjogMC4wOTQ5MzYyNjI2ODE4OTMxNX0sIHsiY29sIjogInkiLCAiaWR4IjogMC4zMjk3MjE5OTAyMjA1OTk2NywgInZhbCI6IDAuNDA1MzM0OTAwNDM1MTU0NX0sIHsiY29sIjogInkiLCAiaWR4IjogMC43MTA2MzE4NzU1MjQ5MywgInZhbCI6IDAuMTQ4NTc1Njc1NTU2NzAwMjZ9LCB7ImNvbCI6ICJ5IiwgImlkeCI6IDAuNTY4OTg4MDMwNTU1MjE5MywgInZhbCI6IDAuNzcwODA3Njc1OTU1NjQ5OH0sIHsiY29sIjogInkiLCAiaWR4IjogMC43NzYzNTk2NDg4NjAxNTI3LCAidmFsIjogMC43MDAzNDA3NTkzNTE1MzMxfSwgeyJjb2wiOiAieSIsICJpZHgiOiAwLjI1MDg0MjQ2ODAwODU1ODksICJ2YWwiOiAwLjI2MTM2OTg3NTA1MDA4MX0sIHsiY29sIjogInkiLCAiaWR4IjogMC45OTk2NDc0MTE2ODI0NzQ2LCAidmFsIjogMC41MjE4Nzc0NjM5NDM1NzMzfSwgeyJjb2wiOiAieSIsICJpZHgiOiAwLjY2NDM1NzY3NzQ1NDEwNjksICJ2YWwiOiAwLjg4MzIzMTU0MTg0MTA0NDF9LCB7ImNvbCI6ICJ5IiwgImlkeCI6IDAuOTI5Njc5NzcxMTQ4NTk0OCwgInZhbCI6IDAuNTMyNDMwMDYyNTMxNTQ0NX0sIHsiY29sIjogInkiLCAiaWR4IjogMC4yNDY0OTQxNzI3ODk0NTgzLCAidmFsIjogMC4xOTA5MjI3Mzc5NjU0OTE1M30sIHsiY29sIjogInkiLCAiaWR4IjogMC45MDYyOTEwNTYyOTgzNzk4LCAidmFsIjogMC41MzMzNzMxMDYzMTMyNTkyfSwgeyJjb2wiOiAieSIsICJpZHgiOiAwLjkxNzc0MTgxNDIyODI0NDcsICJ2YWwiOiAwLjk3MjY3NTk2ODA0NzgxODh9LCB7ImNvbCI6ICJ5IiwgImlkeCI6IDAuMjY1OTcwODk0NjY2MDUzNywgInZhbCI6IDAuMzcxMDk3ODE0Njg5OTc4N30sIHsiY29sIjogInkiLCAiaWR4IjogMC41MDUwNDE4MTkyNTg4MTE4LCAidmFsIjogMC4zMTMzMTMxNjI1MTI2MDk5fSwgeyJjb2wiOiAieSIsICJpZHgiOiAwLjUzMTE5MzIzMjYwMTE2NDEsICJ2YWwiOiAwLjMyNTUwNTA1NTY4MDU4MDN9LCB7ImNvbCI6ICJ5IiwgImlkeCI6IDAuNzUyMjgyNzU3NTQ4MjIxNiwgInZhbCI6IDAuODk5NjY2NTU3MDU3MDM5OH0sIHsiY29sIjogInkiLCAiaWR4IjogMC4xNjc5OTYwNjg3NzYyNjgxNiwgInZhbCI6IDAuODE0MjIyNDUzNzY3NDY2Mn0sIHsiY29sIjogInkiLCAiaWR4IjogMC4yNDY1MTIzNjc3NDMyNjQyNCwgInZhbCI6IDAuODMwNjM5OTgxMTU2MzkyNX0sIHsiY29sIjogInkiLCAiaWR4IjogMC42MDU5NTk3MjkzNjM2Mzc0LCAidmFsIjogMC4xOTQxNjU2NDcxNjE1NjQ3fSwgeyJjb2wiOiAieSIsICJpZHgiOiAwLjQ3MTIyOTQ4MTQ0OTk1MTQ3LCAidmFsIjogMC4xMDQ1OTI4OTQxNDI5NjA4fSwgeyJjb2wiOiAieSIsICJpZHgiOiAwLjk4MzMxMDU2Nzc3Mzc0MTQsICJ2YWwiOiAwLjQxNjkzMjE3NDI5MjYyOTV9LCB7ImNvbCI6ICJ5IiwgImlkeCI6IDAuMDY0MTA3Njc5MTgwNTMwMTcsICJ2YWwiOiAwLjY4MDg2NzI5NjAwNjI1MTR9LCB7ImNvbCI6ICJ5IiwgImlkeCI6IDAuODY2NDc2MzMxMDI0NjI0NiwgInZhbCI6IDAuMjA4NDQzODk2ODg3OTYyMDV9LCB7ImNvbCI6ICJ5IiwgImlkeCI6IDAuOTcwNTAwMTc4MzQ1MDMzOCwgInZhbCI6IDAuNjA5NTM2MTE3MTAzNjI5OX0sIHsiY29sIjogInkiLCAiaWR4IjogMC45MDY3MjA0NTY5MzM0MzE4LCAidmFsIjogMC4wNjMwNTY4MTYzODYyNDkxNn1dfV0sICJoZWlnaHQiOiAzMDAsICJsZWdlbmRzIjogW10sICJtYXJrcyI6IFt7ImZyb20iOiB7ImRhdGEiOiAidGFibGUiLCAidHJhbnNmb3JtIjogW3sia2V5cyI6IFsiZGF0YS5jb2wiXSwgInR5cGUiOiAiZmFjZXQifV19LCAibWFya3MiOiBbeyJwcm9wZXJ0aWVzIjogeyJlbnRlciI6IHsiZmlsbCI6IHsiZmllbGQiOiAiZGF0YS5jb2wiLCAic2NhbGUiOiAiY29sb3IifSwgInNpemUiOiB7InZhbHVlIjogMTAwfSwgIngiOiB7ImZpZWxkIjogImRhdGEuaWR4IiwgInNjYWxlIjogIngifSwgInkiOiB7ImZpZWxkIjogImRhdGEudmFsIiwgInNjYWxlIjogInkifX19LCAidHlwZSI6ICJzeW1ib2wifV0sICJ0eXBlIjogImdyb3VwIn1dLCAicGFkZGluZyI6ICJhdXRvIiwgInNjYWxlcyI6IFt7ImRvbWFpbiI6IHsiZGF0YSI6ICJ0YWJsZSIsICJmaWVsZCI6ICJkYXRhLmlkeCJ9LCAibmFtZSI6ICJ4IiwgInJhbmdlIjogIndpZHRoIiwgInR5cGUiOiAibGluZWFyIn0sIHsiZG9tYWluIjogeyJkYXRhIjogInRhYmxlIiwgImZpZWxkIjogImRhdGEudmFsIn0sICJuYW1lIjogInkiLCAibmljZSI6IHRydWUsICJyYW5nZSI6ICJoZWlnaHQifSwgeyJkb21haW4iOiB7ImRhdGEiOiAidGFibGUiLCAiZmllbGQiOiAiZGF0YS5jb2wifSwgIm5hbWUiOiAiY29sb3IiLCAicmFuZ2UiOiAiY2F0ZWdvcnkyMCIsICJ0eXBlIjogIm9yZGluYWwifV0sICJ3aWR0aCI6IDYwMH0sdmVnYV9mMWZkZDc1ZjNhMzc0MTQ0OTFjMDU5N2I3YTY4OWNlYyk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgCjwvc2NyaXB0Pg== onload=\"this.contentDocument.open();this.contentDocument.write(atob(this.getAttribute('data-html')));this.contentDocument.close();\" allowfullscreen webkitallowfullscreen mozallowfullscreen></iframe></div></div>"
      ],
      "text/plain": [
       "<folium.folium.Map at 0x7f62876f0ca0>"
      ]
     },
     "execution_count": 4,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "m = folium.Map([43, -100], zoom_start=4)\n",
    "\n",
    "popup = folium.Popup()\n",
    "folium.Vega(scatter_chart, height=350, width=650).add_to(popup)\n",
    "folium.Marker([30, -120], popup=popup).add_to(m)\n",
    "\n",
    "# Let's create a Vega popup based on scatter_json.\n",
    "popup = folium.Popup(max_width=0)\n",
    "folium.Vega(scatter_json, height=350, width=650).add_to(popup)\n",
    "folium.Marker([30, -100], popup=popup).add_to(m)\n",
    "\n",
    "# Let's create a Vega popup based on scatter_dict.\n",
    "popup = folium.Popup(max_width=650)\n",
    "folium.Vega(scatter_dict, height=350, width=650).add_to(popup)\n",
    "folium.Marker([30, -80], popup=popup).add_to(m)\n",
    "\n",
    "m"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Fancy HTML popup"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div style=\"width:100%;\"><div style=\"position:relative;width:100%;height:0;padding-bottom:60%;\"><span style=\"color:#565656\">Make this Notebook Trusted to load map: File -> Trust Notebook</span><iframe src=\"about:blank\" style=\"position:absolute;width:100%;height:100%;left:0;top:0;border:none !important;\" data-html=PCFET0NUWVBFIGh0bWw+CjxoZWFkPiAgICAKICAgIDxtZXRhIGh0dHAtZXF1aXY9ImNvbnRlbnQtdHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiAvPgogICAgCiAgICAgICAgPHNjcmlwdD4KICAgICAgICAgICAgTF9OT19UT1VDSCA9IGZhbHNlOwogICAgICAgICAgICBMX0RJU0FCTEVfM0QgPSBmYWxzZTsKICAgICAgICA8L3NjcmlwdD4KICAgIAogICAgPHN0eWxlPmh0bWwsIGJvZHkge3dpZHRoOiAxMDAlO2hlaWdodDogMTAwJTttYXJnaW46IDA7cGFkZGluZzogMDt9PC9zdHlsZT4KICAgIDxzdHlsZT4jbWFwIHtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MDtib3R0b206MDtyaWdodDowO2xlZnQ6MDt9PC9zdHlsZT4KICAgIDxzY3JpcHQgc3JjPSJodHRwczovL2Nkbi5qc2RlbGl2ci5uZXQvbnBtL2xlYWZsZXRAMS42LjAvZGlzdC9sZWFmbGV0LmpzIj48L3NjcmlwdD4KICAgIDxzY3JpcHQgc3JjPSJodHRwczovL2NvZGUuanF1ZXJ5LmNvbS9qcXVlcnktMS4xMi40Lm1pbi5qcyI+PC9zY3JpcHQ+CiAgICA8c2NyaXB0IHNyYz0iaHR0cHM6Ly9tYXhjZG4uYm9vdHN0cmFwY2RuLmNvbS9ib290c3RyYXAvMy4yLjAvanMvYm9vdHN0cmFwLm1pbi5qcyI+PC9zY3JpcHQ+CiAgICA8c2NyaXB0IHNyYz0iaHR0cHM6Ly9jZG5qcy5jbG91ZGZsYXJlLmNvbS9hamF4L2xpYnMvTGVhZmxldC5hd2Vzb21lLW1hcmtlcnMvMi4wLjIvbGVhZmxldC5hd2Vzb21lLW1hcmtlcnMuanMiPjwvc2NyaXB0PgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJodHRwczovL2Nkbi5qc2RlbGl2ci5uZXQvbnBtL2xlYWZsZXRAMS42LjAvZGlzdC9sZWFmbGV0LmNzcyIvPgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJodHRwczovL21heGNkbi5ib290c3RyYXBjZG4uY29tL2Jvb3RzdHJhcC8zLjIuMC9jc3MvYm9vdHN0cmFwLm1pbi5jc3MiLz4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iaHR0cHM6Ly9tYXhjZG4uYm9vdHN0cmFwY2RuLmNvbS9ib290c3RyYXAvMy4yLjAvY3NzL2Jvb3RzdHJhcC10aGVtZS5taW4uY3NzIi8+CiAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Imh0dHBzOi8vbWF4Y2RuLmJvb3RzdHJhcGNkbi5jb20vZm9udC1hd2Vzb21lLzQuNi4zL2Nzcy9mb250LWF3ZXNvbWUubWluLmNzcyIvPgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJodHRwczovL2NkbmpzLmNsb3VkZmxhcmUuY29tL2FqYXgvbGlicy9MZWFmbGV0LmF3ZXNvbWUtbWFya2Vycy8yLjAuMi9sZWFmbGV0LmF3ZXNvbWUtbWFya2Vycy5jc3MiLz4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iaHR0cHM6Ly9jZG4uanNkZWxpdnIubmV0L2doL3B5dGhvbi12aXN1YWxpemF0aW9uL2ZvbGl1bS9mb2xpdW0vdGVtcGxhdGVzL2xlYWZsZXQuYXdlc29tZS5yb3RhdGUubWluLmNzcyIvPgogICAgCiAgICAgICAgICAgIDxtZXRhIG5hbWU9InZpZXdwb3J0IiBjb250ZW50PSJ3aWR0aD1kZXZpY2Utd2lkdGgsCiAgICAgICAgICAgICAgICBpbml0aWFsLXNjYWxlPTEuMCwgbWF4aW11bS1zY2FsZT0xLjAsIHVzZXItc2NhbGFibGU9bm8iIC8+CiAgICAgICAgICAgIDxzdHlsZT4KICAgICAgICAgICAgICAgICNtYXBfNzAwNWQ3MGNjODQ0NDNhNThiOWRmN2UzZGJjN2JkYmEgewogICAgICAgICAgICAgICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICAgICAgICAgICAgICB3aWR0aDogMTAwLjAlOwogICAgICAgICAgICAgICAgICAgIGhlaWdodDogMTAwLjAlOwogICAgICAgICAgICAgICAgICAgIGxlZnQ6IDAuMCU7CiAgICAgICAgICAgICAgICAgICAgdG9wOiAwLjAlOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICA8L3N0eWxlPgogICAgICAgIAo8L2hlYWQ+Cjxib2R5PiAgICAKICAgIAogICAgICAgICAgICA8ZGl2IGNsYXNzPSJmb2xpdW0tbWFwIiBpZD0ibWFwXzcwMDVkNzBjYzg0NDQzYTU4YjlkZjdlM2RiYzdiZGJhIiA+PC9kaXY+CiAgICAgICAgCjwvYm9keT4KPHNjcmlwdD4gICAgCiAgICAKICAgICAgICAgICAgdmFyIG1hcF83MDA1ZDcwY2M4NDQ0M2E1OGI5ZGY3ZTNkYmM3YmRiYSA9IEwubWFwKAogICAgICAgICAgICAgICAgIm1hcF83MDA1ZDcwY2M4NDQ0M2E1OGI5ZGY3ZTNkYmM3YmRiYSIsCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgY2VudGVyOiBbNDMuMCwgLTEwMC4wXSwKICAgICAgICAgICAgICAgICAgICBjcnM6IEwuQ1JTLkVQU0czODU3LAogICAgICAgICAgICAgICAgICAgIHpvb206IDQsCiAgICAgICAgICAgICAgICAgICAgem9vbUNvbnRyb2w6IHRydWUsCiAgICAgICAgICAgICAgICAgICAgcHJlZmVyQ2FudmFzOiBmYWxzZSwKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgKTsKCiAgICAgICAgICAgIAoKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgdGlsZV9sYXllcl85ZDRlODI5YWIxN2M0Mzk2OGE3ZGFjZjQ5ZjliYTExNiA9IEwudGlsZUxheWVyKAogICAgICAgICAgICAgICAgImh0dHBzOi8ve3N9LnRpbGUub3BlbnN0cmVldG1hcC5vcmcve3p9L3t4fS97eX0ucG5nIiwKICAgICAgICAgICAgICAgIHsiYXR0cmlidXRpb24iOiAiRGF0YSBieSBcdTAwMjZjb3B5OyBcdTAwM2NhIGhyZWY9XCJodHRwOi8vb3BlbnN0cmVldG1hcC5vcmdcIlx1MDAzZU9wZW5TdHJlZXRNYXBcdTAwM2MvYVx1MDAzZSwgdW5kZXIgXHUwMDNjYSBocmVmPVwiaHR0cDovL3d3dy5vcGVuc3RyZWV0bWFwLm9yZy9jb3B5cmlnaHRcIlx1MDAzZU9EYkxcdTAwM2MvYVx1MDAzZS4iLCAiZGV0ZWN0UmV0aW5hIjogZmFsc2UsICJtYXhOYXRpdmVab29tIjogMTgsICJtYXhab29tIjogMTgsICJtaW5ab29tIjogMCwgIm5vV3JhcCI6IGZhbHNlLCAib3BhY2l0eSI6IDEsICJzdWJkb21haW5zIjogImFiYyIsICJ0bXMiOiBmYWxzZX0KICAgICAgICAgICAgKS5hZGRUbyhtYXBfNzAwNWQ3MGNjODQ0NDNhNThiOWRmN2UzZGJjN2JkYmEpOwogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBtYXJrZXJfNjFjNDRiN2MxMDIwNGUyODg2NWJhNzYzOGI2MmEzZDcgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFszMC4wLCAtMTAwLjBdLAogICAgICAgICAgICAgICAge30KICAgICAgICAgICAgKS5hZGRUbyhtYXBfNzAwNWQ3MGNjODQ0NDNhNThiOWRmN2UzZGJjN2JkYmEpOwogICAgICAgIAogICAgCiAgICAgICAgdmFyIHBvcHVwXzBmODE5Y2U5N2ZmMjQxMWZhZjVjOTVkNDM2MDllNDIxID0gTC5wb3B1cCh7Im1heFdpZHRoIjogIjEwMCUifSk7CgogICAgICAgIAogICAgICAgICAgICB2YXIgaHRtbF84YmMyNTM2NTU5ZTY0MmZjOTRiMmMzMDVmMGVmZDJjZiA9ICQoYDxkaXYgaWQ9Imh0bWxfOGJjMjUzNjU1OWU2NDJmYzk0YjJjMzA1ZjBlZmQyY2YiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPiAgICAgPGgxPiBUaGlzIGlzIGEgYmlnIHBvcHVwPC9oMT48YnI+ICAgICBXaXRoIGEgZmV3IGxpbmVzIG9mIGNvZGUuLi4gICAgIDxwPiAgICAgPGNvZGU+ICAgICAgICAgZnJvbSBudW1weSBpbXBvcnQgKjxicj4gICAgICAgICBleHAoLTIqcGkpICAgICA8L2NvZGU+ICAgICA8L3A+ICAgICA8L2Rpdj5gKVswXTsKICAgICAgICAgICAgcG9wdXBfMGY4MTljZTk3ZmYyNDExZmFmNWM5NWQ0MzYwOWU0MjEuc2V0Q29udGVudChodG1sXzhiYzI1MzY1NTllNjQyZmM5NGIyYzMwNWYwZWZkMmNmKTsKICAgICAgICAKCiAgICAgICAgbWFya2VyXzYxYzQ0YjdjMTAyMDRlMjg4NjViYTc2MzhiNjJhM2Q3LmJpbmRQb3B1cChwb3B1cF8wZjgxOWNlOTdmZjI0MTFmYWY1Yzk1ZDQzNjA5ZTQyMSkKICAgICAgICA7CgogICAgICAgIAogICAgCjwvc2NyaXB0Pg== onload=\"this.contentDocument.open();this.contentDocument.write(atob(this.getAttribute('data-html')));this.contentDocument.close();\" allowfullscreen webkitallowfullscreen mozallowfullscreen></iframe></div></div>"
      ],
      "text/plain": [
       "<folium.folium.Map at 0x7f62876a5160>"
      ]
     },
     "execution_count": 5,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "import branca\n",
    "\n",
    "m = folium.Map([43, -100], zoom_start=4)\n",
    "\n",
    "html = \"\"\"\n",
    "    <h1> This is a big popup</h1><br>\n",
    "    With a few lines of code...\n",
    "    <p>\n",
    "    <code>\n",
    "        from numpy import *<br>\n",
    "        exp(-2*pi)\n",
    "    </code>\n",
    "    </p>\n",
    "    \"\"\"\n",
    "\n",
    "\n",
    "folium.Marker([30, -100], popup=html).add_to(m)\n",
    "\n",
    "m"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "You can also put any HTML code inside of a Popup, thaks to the `IFrame` object."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div style=\"width:100%;\"><div style=\"position:relative;width:100%;height:0;padding-bottom:60%;\"><span style=\"color:#565656\">Make this Notebook Trusted to load map: File -> Trust Notebook</span><iframe src=\"about:blank\" style=\"position:absolute;width:100%;height:100%;left:0;top:0;border:none !important;\" data-html=PCFET0NUWVBFIGh0bWw+CjxoZWFkPiAgICAKICAgIDxtZXRhIGh0dHAtZXF1aXY9ImNvbnRlbnQtdHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiAvPgogICAgCiAgICAgICAgPHNjcmlwdD4KICAgICAgICAgICAgTF9OT19UT1VDSCA9IGZhbHNlOwogICAgICAgICAgICBMX0RJU0FCTEVfM0QgPSBmYWxzZTsKICAgICAgICA8L3NjcmlwdD4KICAgIAogICAgPHN0eWxlPmh0bWwsIGJvZHkge3dpZHRoOiAxMDAlO2hlaWdodDogMTAwJTttYXJnaW46IDA7cGFkZGluZzogMDt9PC9zdHlsZT4KICAgIDxzdHlsZT4jbWFwIHtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MDtib3R0b206MDtyaWdodDowO2xlZnQ6MDt9PC9zdHlsZT4KICAgIDxzY3JpcHQgc3JjPSJodHRwczovL2Nkbi5qc2RlbGl2ci5uZXQvbnBtL2xlYWZsZXRAMS42LjAvZGlzdC9sZWFmbGV0LmpzIj48L3NjcmlwdD4KICAgIDxzY3JpcHQgc3JjPSJodHRwczovL2NvZGUuanF1ZXJ5LmNvbS9qcXVlcnktMS4xMi40Lm1pbi5qcyI+PC9zY3JpcHQ+CiAgICA8c2NyaXB0IHNyYz0iaHR0cHM6Ly9tYXhjZG4uYm9vdHN0cmFwY2RuLmNvbS9ib290c3RyYXAvMy4yLjAvanMvYm9vdHN0cmFwLm1pbi5qcyI+PC9zY3JpcHQ+CiAgICA8c2NyaXB0IHNyYz0iaHR0cHM6Ly9jZG5qcy5jbG91ZGZsYXJlLmNvbS9hamF4L2xpYnMvTGVhZmxldC5hd2Vzb21lLW1hcmtlcnMvMi4wLjIvbGVhZmxldC5hd2Vzb21lLW1hcmtlcnMuanMiPjwvc2NyaXB0PgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJodHRwczovL2Nkbi5qc2RlbGl2ci5uZXQvbnBtL2xlYWZsZXRAMS42LjAvZGlzdC9sZWFmbGV0LmNzcyIvPgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJodHRwczovL21heGNkbi5ib290c3RyYXBjZG4uY29tL2Jvb3RzdHJhcC8zLjIuMC9jc3MvYm9vdHN0cmFwLm1pbi5jc3MiLz4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iaHR0cHM6Ly9tYXhjZG4uYm9vdHN0cmFwY2RuLmNvbS9ib290c3RyYXAvMy4yLjAvY3NzL2Jvb3RzdHJhcC10aGVtZS5taW4uY3NzIi8+CiAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Imh0dHBzOi8vbWF4Y2RuLmJvb3RzdHJhcGNkbi5jb20vZm9udC1hd2Vzb21lLzQuNi4zL2Nzcy9mb250LWF3ZXNvbWUubWluLmNzcyIvPgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJodHRwczovL2NkbmpzLmNsb3VkZmxhcmUuY29tL2FqYXgvbGlicy9MZWFmbGV0LmF3ZXNvbWUtbWFya2Vycy8yLjAuMi9sZWFmbGV0LmF3ZXNvbWUtbWFya2Vycy5jc3MiLz4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iaHR0cHM6Ly9jZG4uanNkZWxpdnIubmV0L2doL3B5dGhvbi12aXN1YWxpemF0aW9uL2ZvbGl1bS9mb2xpdW0vdGVtcGxhdGVzL2xlYWZsZXQuYXdlc29tZS5yb3RhdGUubWluLmNzcyIvPgogICAgCiAgICAgICAgICAgIDxtZXRhIG5hbWU9InZpZXdwb3J0IiBjb250ZW50PSJ3aWR0aD1kZXZpY2Utd2lkdGgsCiAgICAgICAgICAgICAgICBpbml0aWFsLXNjYWxlPTEuMCwgbWF4aW11bS1zY2FsZT0xLjAsIHVzZXItc2NhbGFibGU9bm8iIC8+CiAgICAgICAgICAgIDxzdHlsZT4KICAgICAgICAgICAgICAgICNtYXBfNWZjYThmMGJiYzlhNGI3Mjk3MTc1ZjA4ODhkZWM5MmUgewogICAgICAgICAgICAgICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICAgICAgICAgICAgICB3aWR0aDogMTAwLjAlOwogICAgICAgICAgICAgICAgICAgIGhlaWdodDogMTAwLjAlOwogICAgICAgICAgICAgICAgICAgIGxlZnQ6IDAuMCU7CiAgICAgICAgICAgICAgICAgICAgdG9wOiAwLjAlOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICA8L3N0eWxlPgogICAgICAgIAo8L2hlYWQ+Cjxib2R5PiAgICAKICAgIAogICAgICAgICAgICA8ZGl2IGNsYXNzPSJmb2xpdW0tbWFwIiBpZD0ibWFwXzVmY2E4ZjBiYmM5YTRiNzI5NzE3NWYwODg4ZGVjOTJlIiA+PC9kaXY+CiAgICAgICAgCjwvYm9keT4KPHNjcmlwdD4gICAgCiAgICAKICAgICAgICAgICAgdmFyIG1hcF81ZmNhOGYwYmJjOWE0YjcyOTcxNzVmMDg4OGRlYzkyZSA9IEwubWFwKAogICAgICAgICAgICAgICAgIm1hcF81ZmNhOGYwYmJjOWE0YjcyOTcxNzVmMDg4OGRlYzkyZSIsCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgY2VudGVyOiBbNDMuMCwgLTEwMC4wXSwKICAgICAgICAgICAgICAgICAgICBjcnM6IEwuQ1JTLkVQU0czODU3LAogICAgICAgICAgICAgICAgICAgIHpvb206IDQsCiAgICAgICAgICAgICAgICAgICAgem9vbUNvbnRyb2w6IHRydWUsCiAgICAgICAgICAgICAgICAgICAgcHJlZmVyQ2FudmFzOiBmYWxzZSwKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgKTsKCiAgICAgICAgICAgIAoKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgdGlsZV9sYXllcl9kOTA4NWNjMjQ5N2I0OWYwYTA2YjIxZWI0ZWJkNmZhNCA9IEwudGlsZUxheWVyKAogICAgICAgICAgICAgICAgImh0dHBzOi8ve3N9LnRpbGUub3BlbnN0cmVldG1hcC5vcmcve3p9L3t4fS97eX0ucG5nIiwKICAgICAgICAgICAgICAgIHsiYXR0cmlidXRpb24iOiAiRGF0YSBieSBcdTAwMjZjb3B5OyBcdTAwM2NhIGhyZWY9XCJodHRwOi8vb3BlbnN0cmVldG1hcC5vcmdcIlx1MDAzZU9wZW5TdHJlZXRNYXBcdTAwM2MvYVx1MDAzZSwgdW5kZXIgXHUwMDNjYSBocmVmPVwiaHR0cDovL3d3dy5vcGVuc3RyZWV0bWFwLm9yZy9jb3B5cmlnaHRcIlx1MDAzZU9EYkxcdTAwM2MvYVx1MDAzZS4iLCAiZGV0ZWN0UmV0aW5hIjogZmFsc2UsICJtYXhOYXRpdmVab29tIjogMTgsICJtYXhab29tIjogMTgsICJtaW5ab29tIjogMCwgIm5vV3JhcCI6IGZhbHNlLCAib3BhY2l0eSI6IDEsICJzdWJkb21haW5zIjogImFiYyIsICJ0bXMiOiBmYWxzZX0KICAgICAgICAgICAgKS5hZGRUbyhtYXBfNWZjYThmMGJiYzlhNGI3Mjk3MTc1ZjA4ODhkZWM5MmUpOwogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBtYXJrZXJfNTZlYjdmYzcyODgxNDMzZWI4MDFjYmIyN2JjYjI5MzcgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFszMC4wLCAtMTAwLjBdLAogICAgICAgICAgICAgICAge30KICAgICAgICAgICAgKS5hZGRUbyhtYXBfNWZjYThmMGJiYzlhNGI3Mjk3MTc1ZjA4ODhkZWM5MmUpOwogICAgICAgIAogICAgCiAgICAgICAgdmFyIHBvcHVwXzMxMzIzZjRkZGRkMDQ2OGE4MWVmMGMxODA0NzU1MDU0ID0gTC5wb3B1cCh7Im1heFdpZHRoIjogNTAwfSk7CgogICAgICAgIAogICAgICAgICAgICB2YXIgaV9mcmFtZV9iNTlhZmQyMDE5ZDM0MmUwODJjNGFlYTIzMjI5MjU1MCA9ICQoYDxpZnJhbWUgc3JjPSJkYXRhOnRleHQvaHRtbDtjaGFyc2V0PXV0Zi04O2Jhc2U2NCxDaUFnSUNBS0lDQWdJRHhvTVQ0Z1ZHaHBjeUJ3YjNCMWNDQnBjeUJoYmlCSlpuSmhiV1U4TDJneFBqeGljajRLSUNBZ0lGZHBkR2dnWVNCbVpYY2diR2x1WlhNZ2IyWWdZMjlrWlM0dUxnb2dJQ0FnUEhBK0NpQWdJQ0E4WTI5a1pUNEtJQ0FnSUNBZ0lDQm1jbTl0SUc1MWJYQjVJR2x0Y0c5eWRDQXFQR0p5UGdvZ0lDQWdJQ0FnSUdWNGNDZ3RNaXB3YVNrS0lDQWdJRHd2WTI5a1pUNEtJQ0FnSUR3dmNENEtJQ0FnSUE9PSIgd2lkdGg9IjUwMCIgc3R5bGU9ImJvcmRlcjpub25lICFpbXBvcnRhbnQ7IiBoZWlnaHQ9IjMwMCI+PC9pZnJhbWU+YClbMF07CiAgICAgICAgICAgIHBvcHVwXzMxMzIzZjRkZGRkMDQ2OGE4MWVmMGMxODA0NzU1MDU0LnNldENvbnRlbnQoaV9mcmFtZV9iNTlhZmQyMDE5ZDM0MmUwODJjNGFlYTIzMjI5MjU1MCk7CiAgICAgICAgCgogICAgICAgIG1hcmtlcl81NmViN2ZjNzI4ODE0MzNlYjgwMWNiYjI3YmNiMjkzNy5iaW5kUG9wdXAocG9wdXBfMzEzMjNmNGRkZGQwNDY4YTgxZWYwYzE4MDQ3NTUwNTQpCiAgICAgICAgOwoKICAgICAgICAKICAgIAo8L3NjcmlwdD4= onload=\"this.contentDocument.open();this.contentDocument.write(atob(this.getAttribute('data-html')));this.contentDocument.close();\" allowfullscreen webkitallowfullscreen mozallowfullscreen></iframe></div></div>"
      ],
      "text/plain": [
       "<folium.folium.Map at 0x7f62876a5be0>"
      ]
     },
     "execution_count": 6,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "m = folium.Map([43, -100], zoom_start=4)\n",
    "\n",
    "html = \"\"\"\n",
    "    <h1> This popup is an Iframe</h1><br>\n",
    "    With a few lines of code...\n",
    "    <p>\n",
    "    <code>\n",
    "        from numpy import *<br>\n",
    "        exp(-2*pi)\n",
    "    </code>\n",
    "    </p>\n",
    "    \"\"\"\n",
    "\n",
    "iframe = branca.element.IFrame(html=html, width=500, height=300)\n",
    "popup = folium.Popup(iframe, max_width=500)\n",
    "\n",
    "folium.Marker([30, -100], popup=popup).add_to(m)\n",
    "\n",
    "m"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div style=\"width:100%;\"><div style=\"position:relative;width:100%;height:0;padding-bottom:60%;\"><span style=\"color:#565656\">Make this Notebook Trusted to load map: File -> Trust Notebook</span><iframe src=\"about:blank\" style=\"position:absolute;width:100%;height:100%;left:0;top:0;border:none !important;\" data-html=PCFET0NUWVBFIGh0bWw+CjxoZWFkPiAgICAKICAgIDxtZXRhIGh0dHAtZXF1aXY9ImNvbnRlbnQtdHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiAvPgogICAgCiAgICAgICAgPHNjcmlwdD4KICAgICAgICAgICAgTF9OT19UT1VDSCA9IGZhbHNlOwogICAgICAgICAgICBMX0RJU0FCTEVfM0QgPSBmYWxzZTsKICAgICAgICA8L3NjcmlwdD4KICAgIAogICAgPHN0eWxlPmh0bWwsIGJvZHkge3dpZHRoOiAxMDAlO2hlaWdodDogMTAwJTttYXJnaW46IDA7cGFkZGluZzogMDt9PC9zdHlsZT4KICAgIDxzdHlsZT4jbWFwIHtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MDtib3R0b206MDtyaWdodDowO2xlZnQ6MDt9PC9zdHlsZT4KICAgIDxzY3JpcHQgc3JjPSJodHRwczovL2Nkbi5qc2RlbGl2ci5uZXQvbnBtL2xlYWZsZXRAMS42LjAvZGlzdC9sZWFmbGV0LmpzIj48L3NjcmlwdD4KICAgIDxzY3JpcHQgc3JjPSJodHRwczovL2NvZGUuanF1ZXJ5LmNvbS9qcXVlcnktMS4xMi40Lm1pbi5qcyI+PC9zY3JpcHQ+CiAgICA8c2NyaXB0IHNyYz0iaHR0cHM6Ly9tYXhjZG4uYm9vdHN0cmFwY2RuLmNvbS9ib290c3RyYXAvMy4yLjAvanMvYm9vdHN0cmFwLm1pbi5qcyI+PC9zY3JpcHQ+CiAgICA8c2NyaXB0IHNyYz0iaHR0cHM6Ly9jZG5qcy5jbG91ZGZsYXJlLmNvbS9hamF4L2xpYnMvTGVhZmxldC5hd2Vzb21lLW1hcmtlcnMvMi4wLjIvbGVhZmxldC5hd2Vzb21lLW1hcmtlcnMuanMiPjwvc2NyaXB0PgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJodHRwczovL2Nkbi5qc2RlbGl2ci5uZXQvbnBtL2xlYWZsZXRAMS42LjAvZGlzdC9sZWFmbGV0LmNzcyIvPgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJodHRwczovL21heGNkbi5ib290c3RyYXBjZG4uY29tL2Jvb3RzdHJhcC8zLjIuMC9jc3MvYm9vdHN0cmFwLm1pbi5jc3MiLz4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iaHR0cHM6Ly9tYXhjZG4uYm9vdHN0cmFwY2RuLmNvbS9ib290c3RyYXAvMy4yLjAvY3NzL2Jvb3RzdHJhcC10aGVtZS5taW4uY3NzIi8+CiAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Imh0dHBzOi8vbWF4Y2RuLmJvb3RzdHJhcGNkbi5jb20vZm9udC1hd2Vzb21lLzQuNi4zL2Nzcy9mb250LWF3ZXNvbWUubWluLmNzcyIvPgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJodHRwczovL2NkbmpzLmNsb3VkZmxhcmUuY29tL2FqYXgvbGlicy9MZWFmbGV0LmF3ZXNvbWUtbWFya2Vycy8yLjAuMi9sZWFmbGV0LmF3ZXNvbWUtbWFya2Vycy5jc3MiLz4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iaHR0cHM6Ly9jZG4uanNkZWxpdnIubmV0L2doL3B5dGhvbi12aXN1YWxpemF0aW9uL2ZvbGl1bS9mb2xpdW0vdGVtcGxhdGVzL2xlYWZsZXQuYXdlc29tZS5yb3RhdGUubWluLmNzcyIvPgogICAgCiAgICAgICAgICAgIDxtZXRhIG5hbWU9InZpZXdwb3J0IiBjb250ZW50PSJ3aWR0aD1kZXZpY2Utd2lkdGgsCiAgICAgICAgICAgICAgICBpbml0aWFsLXNjYWxlPTEuMCwgbWF4aW11bS1zY2FsZT0xLjAsIHVzZXItc2NhbGFibGU9bm8iIC8+CiAgICAgICAgICAgIDxzdHlsZT4KICAgICAgICAgICAgICAgICNtYXBfNjFmYTQ4YTU0MWJiNDBiMWE5ZTlmYjRmOTM4MDFmMmUgewogICAgICAgICAgICAgICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICAgICAgICAgICAgICB3aWR0aDogMTAwLjAlOwogICAgICAgICAgICAgICAgICAgIGhlaWdodDogMTAwLjAlOwogICAgICAgICAgICAgICAgICAgIGxlZnQ6IDAuMCU7CiAgICAgICAgICAgICAgICAgICAgdG9wOiAwLjAlOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICA8L3N0eWxlPgogICAgICAgIAo8L2hlYWQ+Cjxib2R5PiAgICAKICAgIAogICAgICAgICAgICA8ZGl2IGNsYXNzPSJmb2xpdW0tbWFwIiBpZD0ibWFwXzYxZmE0OGE1NDFiYjQwYjFhOWU5ZmI0ZjkzODAxZjJlIiA+PC9kaXY+CiAgICAgICAgCjwvYm9keT4KPHNjcmlwdD4gICAgCiAgICAKICAgICAgICAgICAgdmFyIG1hcF82MWZhNDhhNTQxYmI0MGIxYTllOWZiNGY5MzgwMWYyZSA9IEwubWFwKAogICAgICAgICAgICAgICAgIm1hcF82MWZhNDhhNTQxYmI0MGIxYTllOWZiNGY5MzgwMWYyZSIsCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgY2VudGVyOiBbNDMuMCwgLTEwMC4wXSwKICAgICAgICAgICAgICAgICAgICBjcnM6IEwuQ1JTLkVQU0czODU3LAogICAgICAgICAgICAgICAgICAgIHpvb206IDQsCiAgICAgICAgICAgICAgICAgICAgem9vbUNvbnRyb2w6IHRydWUsCiAgICAgICAgICAgICAgICAgICAgcHJlZmVyQ2FudmFzOiBmYWxzZSwKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgKTsKCiAgICAgICAgICAgIAoKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgdGlsZV9sYXllcl82MmYyMmQ0NDcxYzY0MTk4OWU1ZTU2NGNkOGRmMDA4NyA9IEwudGlsZUxheWVyKAogICAgICAgICAgICAgICAgImh0dHBzOi8ve3N9LnRpbGUub3BlbnN0cmVldG1hcC5vcmcve3p9L3t4fS97eX0ucG5nIiwKICAgICAgICAgICAgICAgIHsiYXR0cmlidXRpb24iOiAiRGF0YSBieSBcdTAwMjZjb3B5OyBcdTAwM2NhIGhyZWY9XCJodHRwOi8vb3BlbnN0cmVldG1hcC5vcmdcIlx1MDAzZU9wZW5TdHJlZXRNYXBcdTAwM2MvYVx1MDAzZSwgdW5kZXIgXHUwMDNjYSBocmVmPVwiaHR0cDovL3d3dy5vcGVuc3RyZWV0bWFwLm9yZy9jb3B5cmlnaHRcIlx1MDAzZU9EYkxcdTAwM2MvYVx1MDAzZS4iLCAiZGV0ZWN0UmV0aW5hIjogZmFsc2UsICJtYXhOYXRpdmVab29tIjogMTgsICJtYXhab29tIjogMTgsICJtaW5ab29tIjogMCwgIm5vV3JhcCI6IGZhbHNlLCAib3BhY2l0eSI6IDEsICJzdWJkb21haW5zIjogImFiYyIsICJ0bXMiOiBmYWxzZX0KICAgICAgICAgICAgKS5hZGRUbyhtYXBfNjFmYTQ4YTU0MWJiNDBiMWE5ZTlmYjRmOTM4MDFmMmUpOwogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBtYXJrZXJfOGM3ZTBiOTA0N2JlNDI5YTg4N2UzOGZjMTM4MDBmM2UgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFszMC4wLCAtMTAwLjBdLAogICAgICAgICAgICAgICAge30KICAgICAgICAgICAgKS5hZGRUbyhtYXBfNjFmYTQ4YTU0MWJiNDBiMWE5ZTlmYjRmOTM4MDFmMmUpOwogICAgICAgIAogICAgCiAgICAgICAgdmFyIHBvcHVwXzA3ZWNlYWNhMjNiZTQ0OWZhNDkxMzA4MDZlZDVhNmQzID0gTC5wb3B1cCh7Im1heFdpZHRoIjogIjEwMCUifSk7CgogICAgICAgIAogICAgICAgICAgICB2YXIgaHRtbF85NTZmMWUxYTcwYTk0Y2ZkOGY3NDBiZTljZjVhNzI5MSA9ICQoYDxkaXYgaWQ9Imh0bWxfOTU2ZjFlMWE3MGE5NGNmZDhmNzQwYmU5Y2Y1YTcyOTEiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjx0YWJsZSBib3JkZXI9IjEiIGNsYXNzPSJkYXRhZnJhbWUgdGFibGUgdGFibGUtc3RyaXBlZCB0YWJsZS1ob3ZlciB0YWJsZS1jb25kZW5zZWQgdGFibGUtcmVzcG9uc2l2ZSI+ICAgPHRoZWFkPiAgICAgPHRyIHN0eWxlPSJ0ZXh0LWFsaWduOiByaWdodDsiPiAgICAgICA8dGg+PC90aD4gICAgICAgPHRoPmNhdHM8L3RoPiAgICAgICA8dGg+ZG9nczwvdGg+ICAgICA8L3RyPiAgIDwvdGhlYWQ+ICAgPHRib2R5PiAgICAgPHRyPiAgICAgICA8dGg+MDwvdGg+ICAgICAgIDx0ZD5hcHBsZTwvdGQ+ICAgICAgIDx0ZD5vcmFuZ2VzPC90ZD4gICAgIDwvdHI+ICAgICA8dHI+ICAgICAgIDx0aD4xPC90aD4gICAgICAgPHRkPm90aGVyPC90ZD4gICAgICAgPHRkPnN0dWZmPC90ZD4gICAgIDwvdHI+ICAgPC90Ym9keT4gPC90YWJsZT48L2Rpdj5gKVswXTsKICAgICAgICAgICAgcG9wdXBfMDdlY2VhY2EyM2JlNDQ5ZmE0OTEzMDgwNmVkNWE2ZDMuc2V0Q29udGVudChodG1sXzk1NmYxZTFhNzBhOTRjZmQ4Zjc0MGJlOWNmNWE3MjkxKTsKICAgICAgICAKCiAgICAgICAgbWFya2VyXzhjN2UwYjkwNDdiZTQyOWE4ODdlMzhmYzEzODAwZjNlLmJpbmRQb3B1cChwb3B1cF8wN2VjZWFjYTIzYmU0NDlmYTQ5MTMwODA2ZWQ1YTZkMykKICAgICAgICA7CgogICAgICAgIAogICAgCjwvc2NyaXB0Pg== onload=\"this.contentDocument.open();this.contentDocument.write(atob(this.getAttribute('data-html')));this.contentDocument.close();\" allowfullscreen webkitallowfullscreen mozallowfullscreen></iframe></div></div>"
      ],
      "text/plain": [
       "<folium.folium.Map at 0x7f62876add00>"
      ]
     },
     "execution_count": 7,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "import pandas as pd\n",
    "\n",
    "df = pd.DataFrame(\n",
    "    data=[[\"apple\", \"oranges\"], [\"other\", \"stuff\"]], columns=[\"cats\", \"dogs\"]\n",
    ")\n",
    "\n",
    "m = folium.Map([43, -100], zoom_start=4)\n",
    "\n",
    "html = df.to_html(\n",
    "    classes=\"table table-striped table-hover table-condensed table-responsive\"\n",
    ")\n",
    "\n",
    "popup = folium.Popup(html)\n",
    "\n",
    "folium.Marker([30, -100], popup=popup).add_to(m)\n",
    "\n",
    "m"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Note that you can put another `Figure` into an `IFrame` ; this should let you do stange things..."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div style=\"width:100%;\"><div style=\"position:relative;width:100%;height:0;padding-bottom:60%;\"><span style=\"color:#565656\">Make this Notebook Trusted to load map: File -> Trust Notebook</span><iframe src=\"about:blank\" style=\"position:absolute;width:100%;height:100%;left:0;top:0;border:none !important;\" data-html=PCFET0NUWVBFIGh0bWw+CjxoZWFkPiAgICAKICAgIDxtZXRhIGh0dHAtZXF1aXY9ImNvbnRlbnQtdHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiAvPgogICAgCiAgICAgICAgPHNjcmlwdD4KICAgICAgICAgICAgTF9OT19UT1VDSCA9IGZhbHNlOwogICAgICAgICAgICBMX0RJU0FCTEVfM0QgPSBmYWxzZTsKICAgICAgICA8L3NjcmlwdD4KICAgIAogICAgPHN0eWxlPmh0bWwsIGJvZHkge3dpZHRoOiAxMDAlO2hlaWdodDogMTAwJTttYXJnaW46IDA7cGFkZGluZzogMDt9PC9zdHlsZT4KICAgIDxzdHlsZT4jbWFwIHtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MDtib3R0b206MDtyaWdodDowO2xlZnQ6MDt9PC9zdHlsZT4KICAgIDxzY3JpcHQgc3JjPSJodHRwczovL2Nkbi5qc2RlbGl2ci5uZXQvbnBtL2xlYWZsZXRAMS42LjAvZGlzdC9sZWFmbGV0LmpzIj48L3NjcmlwdD4KICAgIDxzY3JpcHQgc3JjPSJodHRwczovL2NvZGUuanF1ZXJ5LmNvbS9qcXVlcnktMS4xMi40Lm1pbi5qcyI+PC9zY3JpcHQ+CiAgICA8c2NyaXB0IHNyYz0iaHR0cHM6Ly9tYXhjZG4uYm9vdHN0cmFwY2RuLmNvbS9ib290c3RyYXAvMy4yLjAvanMvYm9vdHN0cmFwLm1pbi5qcyI+PC9zY3JpcHQ+CiAgICA8c2NyaXB0IHNyYz0iaHR0cHM6Ly9jZG5qcy5jbG91ZGZsYXJlLmNvbS9hamF4L2xpYnMvTGVhZmxldC5hd2Vzb21lLW1hcmtlcnMvMi4wLjIvbGVhZmxldC5hd2Vzb21lLW1hcmtlcnMuanMiPjwvc2NyaXB0PgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJodHRwczovL2Nkbi5qc2RlbGl2ci5uZXQvbnBtL2xlYWZsZXRAMS42LjAvZGlzdC9sZWFmbGV0LmNzcyIvPgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJodHRwczovL21heGNkbi5ib290c3RyYXBjZG4uY29tL2Jvb3RzdHJhcC8zLjIuMC9jc3MvYm9vdHN0cmFwLm1pbi5jc3MiLz4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iaHR0cHM6Ly9tYXhjZG4uYm9vdHN0cmFwY2RuLmNvbS9ib290c3RyYXAvMy4yLjAvY3NzL2Jvb3RzdHJhcC10aGVtZS5taW4uY3NzIi8+CiAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Imh0dHBzOi8vbWF4Y2RuLmJvb3RzdHJhcGNkbi5jb20vZm9udC1hd2Vzb21lLzQuNi4zL2Nzcy9mb250LWF3ZXNvbWUubWluLmNzcyIvPgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJodHRwczovL2NkbmpzLmNsb3VkZmxhcmUuY29tL2FqYXgvbGlicy9MZWFmbGV0LmF3ZXNvbWUtbWFya2Vycy8yLjAuMi9sZWFmbGV0LmF3ZXNvbWUtbWFya2Vycy5jc3MiLz4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iaHR0cHM6Ly9jZG4uanNkZWxpdnIubmV0L2doL3B5dGhvbi12aXN1YWxpemF0aW9uL2ZvbGl1bS9mb2xpdW0vdGVtcGxhdGVzL2xlYWZsZXQuYXdlc29tZS5yb3RhdGUubWluLmNzcyIvPgogICAgCiAgICAgICAgICAgIDxtZXRhIG5hbWU9InZpZXdwb3J0IiBjb250ZW50PSJ3aWR0aD1kZXZpY2Utd2lkdGgsCiAgICAgICAgICAgICAgICBpbml0aWFsLXNjYWxlPTEuMCwgbWF4aW11bS1zY2FsZT0xLjAsIHVzZXItc2NhbGFibGU9bm8iIC8+CiAgICAgICAgICAgIDxzdHlsZT4KICAgICAgICAgICAgICAgICNtYXBfNzQyMzRhMjk4OGQ0NGMwY2FhMTJhZmM2MDQ1NDgyYjggewogICAgICAgICAgICAgICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICAgICAgICAgICAgICB3aWR0aDogMTAwLjAlOwogICAgICAgICAgICAgICAgICAgIGhlaWdodDogMTAwLjAlOwogICAgICAgICAgICAgICAgICAgIGxlZnQ6IDAuMCU7CiAgICAgICAgICAgICAgICAgICAgdG9wOiAwLjAlOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICA8L3N0eWxlPgogICAgICAgIAo8L2hlYWQ+Cjxib2R5PiAgICAKICAgIAogICAgICAgICAgICA8ZGl2IGNsYXNzPSJmb2xpdW0tbWFwIiBpZD0ibWFwXzc0MjM0YTI5ODhkNDRjMGNhYTEyYWZjNjA0NTQ4MmI4IiA+PC9kaXY+CiAgICAgICAgCjwvYm9keT4KPHNjcmlwdD4gICAgCiAgICAKICAgICAgICAgICAgdmFyIG1hcF83NDIzNGEyOTg4ZDQ0YzBjYWExMmFmYzYwNDU0ODJiOCA9IEwubWFwKAogICAgICAgICAgICAgICAgIm1hcF83NDIzNGEyOTg4ZDQ0YzBjYWExMmFmYzYwNDU0ODJiOCIsCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgY2VudGVyOiBbNDMuMCwgLTEwMC4wXSwKICAgICAgICAgICAgICAgICAgICBjcnM6IEwuQ1JTLkVQU0czODU3LAogICAgICAgICAgICAgICAgICAgIHpvb206IDQsCiAgICAgICAgICAgICAgICAgICAgem9vbUNvbnRyb2w6IHRydWUsCiAgICAgICAgICAgICAgICAgICAgcHJlZmVyQ2FudmFzOiBmYWxzZSwKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgKTsKCiAgICAgICAgICAgIAoKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgdGlsZV9sYXllcl83MzVmM2E3MWZjNGU0MDY1YmVlZDBjNmJmZWY0NGY2NiA9IEwudGlsZUxheWVyKAogICAgICAgICAgICAgICAgImh0dHBzOi8ve3N9LnRpbGUub3BlbnN0cmVldG1hcC5vcmcve3p9L3t4fS97eX0ucG5nIiwKICAgICAgICAgICAgICAgIHsiYXR0cmlidXRpb24iOiAiRGF0YSBieSBcdTAwMjZjb3B5OyBcdTAwM2NhIGhyZWY9XCJodHRwOi8vb3BlbnN0cmVldG1hcC5vcmdcIlx1MDAzZU9wZW5TdHJlZXRNYXBcdTAwM2MvYVx1MDAzZSwgdW5kZXIgXHUwMDNjYSBocmVmPVwiaHR0cDovL3d3dy5vcGVuc3RyZWV0bWFwLm9yZy9jb3B5cmlnaHRcIlx1MDAzZU9EYkxcdTAwM2MvYVx1MDAzZS4iLCAiZGV0ZWN0UmV0aW5hIjogZmFsc2UsICJtYXhOYXRpdmVab29tIjogMTgsICJtYXhab29tIjogMTgsICJtaW5ab29tIjogMCwgIm5vV3JhcCI6IGZhbHNlLCAib3BhY2l0eSI6IDEsICJzdWJkb21haW5zIjogImFiYyIsICJ0bXMiOiBmYWxzZX0KICAgICAgICAgICAgKS5hZGRUbyhtYXBfNzQyMzRhMjk4OGQ0NGMwY2FhMTJhZmM2MDQ1NDgyYjgpOwogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBtYXJrZXJfNzZjOGQwYjlkYmIwNDU0Nzg3ZDE1MDdkZjA2OGUzNTkgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFszMC4wLCAtMTAwLjBdLAogICAgICAgICAgICAgICAge30KICAgICAgICAgICAgKS5hZGRUbyhtYXBfNzQyMzRhMjk4OGQ0NGMwY2FhMTJhZmM2MDQ1NDgyYjgpOwogICAgICAgIAogICAgCiAgICAgICAgdmFyIHBvcHVwX2JmYzlkYzQyYjdmZTRlYzdhMGMzZGM4ZmJhYTJiY2RiID0gTC5wb3B1cCh7Im1heFdpZHRoIjogMjY1MH0pOwoKICAgICAgICAKICAgICAgICAgICAgdmFyIGlfZnJhbWVfNWQ2MzNkYWQzY2MxNDkyZGFjZWU0ZTMwYzMzYzlkNWUgPSAkKGA8aWZyYW1lIHNyYz0iZGF0YTp0ZXh0L2h0bWw7Y2hhcnNldD11dGYtODtiYXNlNjQsQ2lBZ0lDQThJVVJQUTFSWlVFVWdhSFJ0YkQ0S1BHaGxZV1ErSUNBZ0lBb2dJQ0FnUEcxbGRHRWdhSFIwY0MxbGNYVnBkajBpWTI5dWRHVnVkQzEwZVhCbElpQmpiMjUwWlc1MFBTSjBaWGgwTDJoMGJXdzdJR05vWVhKelpYUTlWVlJHTFRnaUlDOCtDaUFnSUNBS0lDQWdJQ0FnSUNBOGMyTnlhWEIwUGdvZ0lDQWdJQ0FnSUNBZ0lDQk1YMDVQWDFSUFZVTklJRDBnWm1Gc2MyVTdDaUFnSUNBZ0lDQWdJQ0FnSUV4ZlJFbFRRVUpNUlY4elJDQTlJR1poYkhObE93b2dJQ0FnSUNBZ0lEd3ZjMk55YVhCMFBnb2dJQ0FnQ2lBZ0lDQThjM1I1YkdVK2FIUnRiQ3dnWW05a2VTQjdkMmxrZEdnNklERXdNQ1U3YUdWcFoyaDBPaUF4TURBbE8yMWhjbWRwYmpvZ01EdHdZV1JrYVc1bk9pQXdPMzA4TDNOMGVXeGxQZ29nSUNBZ1BITjBlV3hsUGlOdFlYQWdlM0J2YzJsMGFXOXVPbUZpYzI5c2RYUmxPM1J2Y0Rvd08ySnZkSFJ2YlRvd08zSnBaMmgwT2pBN2JHVm1kRG93TzMwOEwzTjBlV3hsUGdvZ0lDQWdQSE5qY21sd2RDQnpjbU05SW1oMGRIQnpPaTh2WTJSdUxtcHpaR1ZzYVhaeUxtNWxkQzl1Y0cwdmJHVmhabXhsZEVBeExqWXVNQzlrYVhOMEwyeGxZV1pzWlhRdWFuTWlQand2YzJOeWFYQjBQZ29nSUNBZ1BITmpjbWx3ZENCemNtTTlJbWgwZEhCek9pOHZZMjlrWlM1cWNYVmxjbmt1WTI5dEwycHhkV1Z5ZVMweExqRXlMalF1YldsdUxtcHpJajQ4TDNOamNtbHdkRDRLSUNBZ0lEeHpZM0pwY0hRZ2MzSmpQU0pvZEhSd2N6b3ZMMjFoZUdOa2JpNWliMjkwYzNSeVlYQmpaRzR1WTI5dEwySnZiM1J6ZEhKaGNDOHpMakl1TUM5cWN5OWliMjkwYzNSeVlYQXViV2x1TG1weklqNDhMM05qY21sd2RENEtJQ0FnSUR4elkzSnBjSFFnYzNKalBTSm9kSFJ3Y3pvdkwyTmtibXB6TG1Oc2IzVmtabXhoY21VdVkyOXRMMkZxWVhndmJHbGljeTlNWldGbWJHVjBMbUYzWlhOdmJXVXRiV0Z5YTJWeWN5OHlMakF1TWk5c1pXRm1iR1YwTG1GM1pYTnZiV1V0YldGeWEyVnljeTVxY3lJK1BDOXpZM0pwY0hRK0NpQWdJQ0E4YkdsdWF5QnlaV3c5SW5OMGVXeGxjMmhsWlhRaUlHaHlaV1k5SW1oMGRIQnpPaTh2WTJSdUxtcHpaR1ZzYVhaeUxtNWxkQzl1Y0cwdmJHVmhabXhsZEVBeExqWXVNQzlrYVhOMEwyeGxZV1pzWlhRdVkzTnpJaTgrQ2lBZ0lDQThiR2x1YXlCeVpXdzlJbk4wZVd4bGMyaGxaWFFpSUdoeVpXWTlJbWgwZEhCek9pOHZiV0Y0WTJSdUxtSnZiM1J6ZEhKaGNHTmtiaTVqYjIwdlltOXZkSE4wY21Gd0x6TXVNaTR3TDJOemN5OWliMjkwYzNSeVlYQXViV2x1TG1OemN5SXZQZ29nSUNBZ1BHeHBibXNnY21Wc1BTSnpkSGxzWlhOb1pXVjBJaUJvY21WbVBTSm9kSFJ3Y3pvdkwyMWhlR05rYmk1aWIyOTBjM1J5WVhCalpHNHVZMjl0TDJKdmIzUnpkSEpoY0M4ekxqSXVNQzlqYzNNdlltOXZkSE4wY21Gd0xYUm9aVzFsTG0xcGJpNWpjM01pTHo0S0lDQWdJRHhzYVc1cklISmxiRDBpYzNSNWJHVnphR1ZsZENJZ2FISmxaajBpYUhSMGNITTZMeTl0WVhoalpHNHVZbTl2ZEhOMGNtRndZMlJ1TG1OdmJTOW1iMjUwTFdGM1pYTnZiV1V2TkM0MkxqTXZZM056TDJadmJuUXRZWGRsYzI5dFpTNXRhVzR1WTNOeklpOCtDaUFnSUNBOGJHbHVheUJ5Wld3OUluTjBlV3hsYzJobFpYUWlJR2h5WldZOUltaDBkSEJ6T2k4dlkyUnVhbk11WTJ4dmRXUm1iR0Z5WlM1amIyMHZZV3BoZUM5c2FXSnpMMHhsWVdac1pYUXVZWGRsYzI5dFpTMXRZWEpyWlhKekx6SXVNQzR5TDJ4bFlXWnNaWFF1WVhkbGMyOXRaUzF0WVhKclpYSnpMbU56Y3lJdlBnb2dJQ0FnUEd4cGJtc2djbVZzUFNKemRIbHNaWE5vWldWMElpQm9jbVZtUFNKb2RIUndjem92TDJOa2JpNXFjMlJsYkdsMmNpNXVaWFF2WjJndmNIbDBhRzl1TFhacGMzVmhiR2w2WVhScGIyNHZabTlzYVhWdEwyWnZiR2wxYlM5MFpXMXdiR0YwWlhNdmJHVmhabXhsZEM1aGQyVnpiMjFsTG5KdmRHRjBaUzV0YVc0dVkzTnpJaTgrQ2lBZ0lDQUtJQ0FnSUNBZ0lDQWdJQ0FnUEcxbGRHRWdibUZ0WlQwaWRtbGxkM0J2Y25RaUlHTnZiblJsYm5ROUluZHBaSFJvUFdSbGRtbGpaUzEzYVdSMGFDd0tJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lHbHVhWFJwWVd3dGMyTmhiR1U5TVM0d0xDQnRZWGhwYlhWdExYTmpZV3hsUFRFdU1Dd2dkWE5sY2kxelkyRnNZV0pzWlQxdWJ5SWdMejRLSUNBZ0lDQWdJQ0FnSUNBZ1BITjBlV3hsUGdvZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSTIxaGNGODRZamN3WVRNMVpqazBOamswWWpVeFlqSTRZemhqTVdNM09EZzRPRE0yTkNCN0NpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdjRzl6YVhScGIyNDZJSEpsYkdGMGFYWmxPd29nSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUhkcFpIUm9PaUF4TURBdU1DVTdDaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnYUdWcFoyaDBPaUF4TURBdU1DVTdDaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnYkdWbWREb2dNQzR3SlRzS0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQjBiM0E2SURBdU1DVTdDaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQjlDaUFnSUNBZ0lDQWdJQ0FnSUR3dmMzUjViR1UrQ2lBZ0lDQWdJQ0FnQ2p3dmFHVmhaRDRLUEdKdlpIaytJQ0FnSUFvZ0lDQWdDaUFnSUNBZ0lDQWdJQ0FnSUR4a2FYWWdZMnhoYzNNOUltWnZiR2wxYlMxdFlYQWlJR2xrUFNKdFlYQmZPR0kzTUdFek5XWTVORFk1TkdJMU1XSXlPR000WXpGak56ZzRPRGd6TmpRaUlENDhMMlJwZGo0S0lDQWdJQ0FnSUNBS1BDOWliMlI1UGdvOGMyTnlhWEIwUGlBZ0lDQUtJQ0FnSUFvZ0lDQWdJQ0FnSUNBZ0lDQjJZWElnYldGd1h6aGlOekJoTXpWbU9UUTJPVFJpTlRGaU1qaGpPR014WXpjNE9EZzRNelkwSUQwZ1RDNXRZWEFvQ2lBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FpYldGd1h6aGlOekJoTXpWbU9UUTJPVFJpTlRGaU1qaGpPR014WXpjNE9EZzRNelkwSWl3S0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUhzS0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQmpaVzUwWlhJNklGc3RNalV1TUN3Z01UVXdMakJkTEFvZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lHTnljem9nVEM1RFVsTXVSVkJUUnpNNE5UY3NDaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnZW05dmJUb2dNeXdLSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCNmIyOXRRMjl1ZEhKdmJEb2dkSEoxWlN3S0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQndjbVZtWlhKRFlXNTJZWE02SUdaaGJITmxMQW9nSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdmUW9nSUNBZ0lDQWdJQ0FnSUNBcE93b0tJQ0FnSUNBZ0lDQWdJQ0FnQ2dvZ0lDQWdJQ0FnSUFvZ0lDQWdDaUFnSUNBZ0lDQWdJQ0FnSUhaaGNpQjBhV3hsWDJ4aGVXVnlYekkyTlRrMk16VTBOakF5T1RSaFlXTTVPRGszWlRoa1lqTTBaR1V4WWpVMElEMGdUQzUwYVd4bFRHRjVaWElvQ2lBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FpYUhSMGNITTZMeTk3YzMwdWRHbHNaUzV2Y0dWdWMzUnlaV1YwYldGd0xtOXlaeTk3ZW4wdmUzaDlMM3Q1ZlM1d2JtY2lMQW9nSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdleUpoZEhSeWFXSjFkR2x2YmlJNklDSkVZWFJoSUdKNUlGeDFNREF5Tm1OdmNIazdJRngxTURBelkyRWdhSEpsWmoxY0ltaDBkSEE2THk5dmNHVnVjM1J5WldWMGJXRndMbTl5WjF3aVhIVXdNRE5sVDNCbGJsTjBjbVZsZEUxaGNGeDFNREF6WXk5aFhIVXdNRE5sTENCMWJtUmxjaUJjZFRBd00yTmhJR2h5WldZOVhDSm9kSFJ3T2k4dmQzZDNMbTl3Wlc1emRISmxaWFJ0WVhBdWIzSm5MMk52Y0hseWFXZG9kRndpWEhVd01ETmxUMFJpVEZ4MU1EQXpZeTloWEhVd01ETmxMaUlzSUNKa1pYUmxZM1JTWlhScGJtRWlPaUJtWVd4elpTd2dJbTFoZUU1aGRHbDJaVnB2YjIwaU9pQXhPQ3dnSW0xaGVGcHZiMjBpT2lBeE9Dd2dJbTFwYmxwdmIyMGlPaUF3TENBaWJtOVhjbUZ3SWpvZ1ptRnNjMlVzSUNKdmNHRmphWFI1SWpvZ01Td2dJbk4xWW1SdmJXRnBibk1pT2lBaVlXSmpJaXdnSW5SdGN5STZJR1poYkhObGZRb2dJQ0FnSUNBZ0lDQWdJQ0FwTG1Ga1pGUnZLRzFoY0Y4NFlqY3dZVE0xWmprME5qazBZalV4WWpJNFl6aGpNV00zT0RnNE9ETTJOQ2s3Q2lBZ0lDQWdJQ0FnQ2p3dmMyTnlhWEIwUGc9PSIgd2lkdGg9IjUwMCIgc3R5bGU9ImJvcmRlcjpub25lICFpbXBvcnRhbnQ7IiBoZWlnaHQ9IjMwMCI+PC9pZnJhbWU+YClbMF07CiAgICAgICAgICAgIHBvcHVwX2JmYzlkYzQyYjdmZTRlYzdhMGMzZGM4ZmJhYTJiY2RiLnNldENvbnRlbnQoaV9mcmFtZV81ZDYzM2RhZDNjYzE0OTJkYWNlZTRlMzBjMzNjOWQ1ZSk7CiAgICAgICAgCgogICAgICAgIG1hcmtlcl83NmM4ZDBiOWRiYjA0NTQ3ODdkMTUwN2RmMDY4ZTM1OS5iaW5kUG9wdXAocG9wdXBfYmZjOWRjNDJiN2ZlNGVjN2EwYzNkYzhmYmFhMmJjZGIpCiAgICAgICAgOwoKICAgICAgICAKICAgIAo8L3NjcmlwdD4= onload=\"this.contentDocument.open();this.contentDocument.write(atob(this.getAttribute('data-html')));this.contentDocument.close();\" allowfullscreen webkitallowfullscreen mozallowfullscreen></iframe></div></div>"
      ],
      "text/plain": [
       "<folium.folium.Map at 0x7f62877d4b80>"
      ]
     },
     "execution_count": 8,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# Let's create a Figure, with a map inside.\n",
    "f = branca.element.Figure()\n",
    "folium.Map([-25, 150], zoom_start=3).add_to(f)\n",
    "\n",
    "# Let's put the figure into an IFrame.\n",
    "iframe = branca.element.IFrame(width=500, height=300)\n",
    "f.add_to(iframe)\n",
    "\n",
    "# Let's put the IFrame in a Popup\n",
    "popup = folium.Popup(iframe, max_width=2650)\n",
    "\n",
    "# Let's create another map.\n",
    "m = folium.Map([43, -100], zoom_start=4)\n",
    "\n",
    "# Let's put the Popup on a marker, in the second map.\n",
    "folium.Marker([30, -100], popup=popup).add_to(m)\n",
    "\n",
    "# We get a map in a Popup. Not really useful, but powerful.\n",
    "m"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.9.0"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 1
}
